Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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# 如果我不打开SqlConnection的实例会发生什么?_C#_Sql Server - Fatal编程技术网

C# 如果我不打开SqlConnection的实例会发生什么?

C# 如果我不打开SqlConnection的实例会发生什么?,c#,sql-server,C#,Sql Server,我正在审查一个应用程序中的一段代码,在连接到数据库方面遇到了一些非常奇怪的问题 它在不打开连接的情况下执行查询,如下所示: using (sqlConnection1 = new SqlConnection(connString) { SqlCommand comm = new SqlCommand(query,sqlConnection1); // ... parameters are handled here... SqlDataAdapter ad = new

我正在审查一个应用程序中的一段代码,在连接到数据库方面遇到了一些非常奇怪的问题

它在不打开连接的情况下执行查询,如下所示:

using (sqlConnection1 = new SqlConnection(connString)
{
    SqlCommand comm = new SqlCommand(query,sqlConnection1);

    // ... parameters are handled here...

    SqlDataAdapter ad = new SqlDataAdapter(comm);
    ds = new DataSet();
    ad.FillSchema(ds, SchemaType.Source);
    ad.Fill(ds);
}

它不应该因为连接未打开而失败吗?实际上,我在另一个项目中对此进行了测试,它成功了。

如果连接已关闭,则使用SqlDataAdapter.Fill将打开连接

,如果conenction尚未打开,SqlDataAdapter将打开它,并将其返回到以前的状态

与SelectCommand关联的连接对象必须有效,但无需打开。如果在调用FillSchema之前关闭了连接,则打开该连接以检索数据,然后关闭。如果在调用FillSchema之前连接已打开,则它将保持打开状态

填充
的行为方式也与方法相同

Fill方法使用SELECT命令从数据源检索行 由关联的SelectCommand属性指定的语句。这个 与SELECT语句关联的连接对象必须有效, 但它不需要打开。如果在调用Fill之前关闭了连接,则打开连接以检索数据,然后关闭连接。如果 调用Fill之前,连接已打开,但仍保持打开状态。

另外,
FillSchema
方法做同样的事情。

参考

Fill方法隐式打开DataAdapter连接 如果发现连接尚未打开,则正在使用。如果填充 打开连接时,它也会在填充时关闭连接 完成了。这可以简化处理单个问题时的代码 操作,例如填充或更新


这意味着在
da.Fill(ds,“Test”)方法本身关闭了连接。但是您需要打开它以进行以下更新(但失败)

如果有疑问,请阅读手册。您可能需要将该链接中的部分内容带到另一个页面。MSDN不太可能下降,但URL可能会改变,这使得这个答案没有什么帮助。