首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlDataAdapter闭合连接法

SqlDataAdapter闭合连接法
EN

Stack Overflow用户
提问于 2013-11-20 09:07:14
回答 2查看 3.8K关注 0票数 2

我在我的程序中有这样的代码,我相信在数据被填充之后,它不会关闭连接。

代码语言:javascript
复制
public static string ConnectionInfo = System.Configuration.ConfigurationManager.ConnectionStrings["Default"].ConnectionString;
public static DataTable ExecuteQuery(string query, string table)
    {
        SqlConnection cnn = new SqlConnection(ConnectionInfo);
        SqlDataAdapter Adp = new SqlDataAdapter(query, cnn);
        DataSet Ds = new DataSet();
        Adp.Fill(Ds, table);
        return Ds.Tables[table];
    }

这个代码有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-20 09:10:19

唯一的问题是您没有将using语句用于SqlConnectionDataAdapter。然而,DbDataAdapter.Fill打开并关闭了连接。

代码语言:javascript
复制
public static DataTable ExecuteQuery(string query, string table)
{
    using(SqlConnection cnn = new SqlConnection(ConnectionInfo))
    using(SqlDataAdapter Adp = new SqlDataAdapter(query, cnn))
    {
        DataTable tbl = new DataTable();
        Adp.Fill(tbl);
        return tbl;
    }
}

与SELECT语句关联的连接对象必须有效,但不需要打开。如果连接在调用Fill之前关闭,则打开它以检索数据,然后打开,然后关闭。如果在调用Fill之前连接是打开的,则它仍然是打开的。

请注意,

  • 即使出现错误,using语句也会隐含地关闭连接。
  • 我使用DataAdapter.Fill(DataTable),因为您使用的是单个表

编辑:我只是注意到您正在为表名使用一个参数。您也可以使用DbDataAdapter.Fill(DataSet, String)代替。这不会改变任何事情。

票数 4
EN

Stack Overflow用户

发布于 2013-11-20 09:09:20

添加一个using语句,以便可靠地关闭连接。这确保即使发生异常也关闭连接。更改代码如下:

代码语言:javascript
复制
public static DataTable ExecuteQuery(string query, string table)
    {
        using(SqlConnection cnn = new SqlConnection(ConnectionInfo))
        {
            SqlDataAdapter Adp = new SqlDataAdapter(query, cnn);
            DataSet Ds = new DataSet();
            Adp.Fill(Ds, table);
            return Ds.Tables[table];
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20091528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档