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可能会改变,这使得这个答案没有什么帮助。