gpt4 book ai didi

.net - 抛出异常时,DataAdapter.Fill()是否关闭其连接?

转载 作者:行者123 更新时间:2023-12-03 14:02:29 25 4
gpt4 key购买 nike

我在旧版应用程序中使用ADO.NET(.NET 1.1)。我知道,如果在将连接提供给DataAdapter之前没有手动打开连接,则DataAdapter.Fill()会打开和关闭连接。

我的问题:如果.Fill()导致异常,它还会关闭连接吗? (由于无法访问SQL Server或其他原因)。它是否会泄漏连接或是否具有内置的“最终条款”以确保连接已关闭。

代码示例:

Dim cmd As New SqlCommand
Dim da As New SqlDataAdapter
Dim ds As New DataSet
cmd.Connection = New SqlConnection(strConnection)
cmd.CommandText = strSQL
da.SelectCommand = cmd
da.Fill(ds)

最佳答案

如果在调用Fill()方法之前打开了连接,则否,该连接将不会被DataAdapter关闭。

但是,如果您没有显式打开连接,而是让DataAdapter在Fill()命令中打开和关闭连接,则错误时将关闭连接。

可以从多种文档来源中隐含这一点,包括以下内容:Data Access Strategies Using ADO.NET and SQL

此外,这可以通过编写一个将出错的例程,然后检查连接状态的代码来证明。

Windows Forms应用程序中的此代码证明了这一点。第一个消息框将显示“打开”,第二个消息框将显示“关闭”。

              string connString = "";
private void Form1_Load(object sender, EventArgs e)
{
connString = Properties.Settings.Default.EventLoggingConnectionString;
ExplicitlyOpenConnection();
LetDataAdapterHandleIt();
}

private void ExplicitlyOpenConnection()
{
System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(connString);
System.Data.DataSet ds = new DataSet();
System.Data.SqlClient.SqlDataAdapter ad = new System.Data.SqlClient.SqlDataAdapter("Select bogusdata from nonexistenttable", cn);

cn.Open();
try
{
ad.Fill(ds);
}
catch (Exception ex)
{

}

MessageBox.Show(cn.State.ToString());
cn.Close();
}
private void LetDataAdapterHandleIt()
{
System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(connString);
System.Data.DataSet ds = new DataSet();
System.Data.SqlClient.SqlDataAdapter ad = new System.Data.SqlClient.SqlDataAdapter("Select bogusdata from nonexistenttable", cn);

try
{
ad.Fill(ds);
}
catch (Exception ex)
{

}
MessageBox.Show(cn.State.ToString());
}

关于.net - 抛出异常时,DataAdapter.Fill()是否关闭其连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2472854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com