首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用实用工具类管理SQL连接?

如何使用实用工具类管理SQL连接?
EN

Stack Overflow用户
提问于 2009-10-21 16:40:30
回答 5查看 3.7K关注 0票数 4

我们有一个SQL实用程序类,它将存储过程的名称作为其输入参数,并返回datatable中的结果。这背后的原因是,我们不必担心忘记关闭连接和连接泄漏。此外,我们还可以通过在数据访问层中重新创建数据适配器和数据存储器来减少代码。

我遇到的问题是,我们正在填充datatable,这样我们就可以循环使用它来创建对象,所以我们基本上是像使用数据中心一样使用它。我读过一些类,这些类将返回数据存储程序或数据适配器。但问题是客户端必须打开和关闭连接,或者必须在Finalize方法中关闭连接。您似乎不希望垃圾收集负责关闭数据库连接。

总之,我们希望有一个类,这样我们就可以减少代码,因为我们不必为每个查询创建数据区,这样我们就可以确保数据库连接被关闭。

处理这件事的最佳方法是什么?

更新:仍然在考虑这个问题,但到目前为止,最佳实践似乎仍然是返回一个数据中心,使用CommandBehavior.CloseConnection,然后信任谁曾经使用这个类调用dr.Close()?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-21 19:45:03

你有没有考虑过微软企业图书馆

代码语言:javascript
复制
public List<User> GetUsers()
{
    List<User> result = new List<User>();

    Database db = new
    Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase(this.connectionString);
    DbCommand cmd = db.GetStoredProcCommand("GetUsers");

    using (IDataReader rdr = db.ExecuteReader(cmd))
    {
        while (rdr.Read())
        {
            User user = new User();
            FillUser(rdr, user);                   
            result.Add(user);
        }
    }
    return result;

}
票数 3
EN

Stack Overflow用户

发布于 2009-10-21 19:50:40

我们使用这样的东西,它在大容量下表现很好。

代码语言:javascript
复制
    public SqlDataReader ExecuteReader(string command, SqlParameter[] parameters)
    {
        SqlDataReader reader = null;

        using (SqlConnection conn = new SqlConnection())
        using (SqlCommand cmd = conn.CreateCommand())
        {
            conn.Open();

            cmd.CommandText = command;
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddRange(parameters);

            reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }

        return reader;
    }

DataTables没有被认为是最佳实践,原因有几个,包括它们的膨胀和缺乏类型安全性。

票数 2
EN

Stack Overflow用户

发布于 2009-10-21 18:29:04

我有相同的结构--具有获取数据并返回填充DataTables的方法的实用程序类(或填充/更新传递给它们的DataTable )--原因完全相同:将数据库连接与代码的其余部分分开,并确保它们仅在需要和关闭时才被打开。特别是由于数据存储在各种后端系统中,而且我只想向我的应用程序提供一个接口,而不是让它担心细节。

您的情况有一个不同:我们(通常)不从DataTables中的行创建对象,而是直接处理行中的数据。我发现使用DataTables工作简单而高效。

除此之外,我个人不认为这种方法有什么问题,并发现它对我们的目的非常有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1602043

复制
相关文章

相似问题

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