Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据适配器.select命令.connection_C#_Sqldataadapter - Fatal编程技术网

C# 数据适配器.select命令.connection

C# 数据适配器.select命令.connection,c#,sqldataadapter,C#,Sqldataadapter,我使用下面的代码从数据库中获取数据。但当断点转到var k之后的任何一行时,会立即引发异常 DataSet ds = new DataSet(); try { using (SqlConnection con = new SqlConnection()) { con.ConnectionString = @"Data Source = sql

我使用下面的代码从数据库中获取数据。但当断点转到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;


                    }
                }
            }
****例外情况详情:**

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

答案可能很简单,但它占用了我将近4个小时的时间。非常感谢您的帮助

注意: 我可以使用sqlcommand处理下面的代码,但我想尝试使用数据适配器


您必须实例化
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;

您应该将创建的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中出现错误的结果,但如果您希望传递一个整数,然后将输入转换为整数,这似乎是安全的)

首先非常感谢您的即时回复,但还是一样的问题。用代码更新了我的问题。你怎么了suggested@TheGameiswar将
con
引用设置为
Connection
property这就是您的代码吗?因为如果没有正确的casingit编译,它将无法编译,所以我只删除了catch块。我从VSM复制粘贴了它。感谢整数转换的额外技巧,