数据适配器.选择command.connection

本文关键字:connection command 选择 适配器 数据 | 更新日期: 2023-09-27 18:02:08

我使用下面的代码从数据库中获取数据。但是,当断点位于var k之后的任何一行时,立即引发异常。

 DataSet ds = new DataSet();
            try
            {
                using (SqlConnection con = new SqlConnection())
                {
                    con.ConnectionString = @"Data Source = sql'db1,5000; Initial Catalog = uatdb; Integrated Security = SSPI";
                    using (SqlDataAdapter da = new SqlDataAdapter())
                    {
                        var k = con.State;

更新:
从答案中添加了这行,但没有帮助,仍然错误

                        da.selectcommand=new sqlcommand();
                        da.SelectCommand.Connection.ConnectionString= con.ConnectionString;
                        da.SelectCommand.CommandText = "usp_checkstatus";
                        da.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = TextBox1.Text.ToString(); ;
                        da.SelectCommand.CommandType = CommandType.StoredProcedure;

                        //  da.SelectCommand.Parameters.AddWithValue("@buildid", TextBox1.Text);
                        da.Fill(ds);
                        return ds;

                    }
                }
            }

****异常详细信息:****

object引用未设置为object的实例。连接状态总是关闭,DB,连接字符串是正确的,我没有打开连接,因为数据适配器将为我打开连接。

答案可能很简单,但它现在花了我将近4个小时的时间。如有任何帮助,不胜感激。

注意:我可以使用sqlcommand在下面的问题中使用代码来实现此工作,但我想尝试使用数据适配器

如何使用具有存储过程和参数的DataAdapter

数据适配器.选择command.connection

您应该将创建的SqlConnection设置为SqlDataAdapter。没有必要打开它,因为如果它是关闭的,适配器会为您打开它,但适配器必须知道连接。

DataSet ds = new DataSet();
try
{
    using (SqlConnection con = new SqlConnection(@"Data Source = sql'db1,5000; 
           Initial Catalog = uatdb; Integrated Security = SSPI"))
    using (SqlDataAdapter da = new SqlDataAdapter("usp_checkstatus", con))
    {
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        da.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32(TextBox1.Text);
        da.Fill(ds);
        return ds;
    }
}

也不需要创建特定的SqlCommand。当您创建适配器并传递存储过程名称时,将自动为您创建一个新的SqlCommand,当然您仍然需要设置它的参数和它的CommandType。(关于参数的说明,我不确定这是否会导致您的sp中的错误结果,但似乎是安全的,如果您想传递一个整数,然后将输入转换为整数)

您必须实例化SelectCommand属性:

 using (SqlDataAdapter da = new SqlDataAdapter())
   {
    da.SelectCommand = new SqlCommand();
    da.SelectCommand.Connection=con;
    ..
   }

或者创建SqlCommand对象并将其引用赋值给SelectCommand属性。

var cmd = new SqlCommand();
cmd.CommandText = "your-proc-name";
cmd.Connection = con;
.....
adp.SelectCommand = cmd;