C# 将ADO.NET与设计模式一起使用的最佳实践?

C# 将ADO.NET与设计模式一起使用的最佳实践?,c#,ado.net,C#,Ado.net,我有类似以下的东西 ... public DataTable GetList() { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // select from table } } public void Insert() { using (SqlConnection connec

我有类似以下的东西

...
public DataTable GetList()
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();      
        // select from table 
    }
}

public void Insert()
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();      
        // Insert into table
    }
}

...
是否有方法将连接字符串定义为全局变量,并在操作后进行处理

// connection open

...

public DataTable GetList()
{
    // use global connection
}

public void Insert()
{
    // use global connection
}

...

// connection close

我该怎么做?我可以使用哪种设计模式?

好吧,因为您使用的是SQL Server,所以保持这样的连接打开被认为是不好的做法

Net提供了一种称为ConnectionPooling的功能。一旦打开连接,它将检查池。如果可以找到具有相同连接字符串的现有连接,则会从池中返回该连接,因此安装时间非常短

当您关闭连接时,它将返回到池中

这是非常有效的,并使连接到数据库的速度非常快

编辑


下面是一篇关于这个主题的MSDN文章

好吧,因为您使用的是SQL Server,所以保持连接这样打开被认为是不好的做法

Net提供了一种称为ConnectionPooling的功能。一旦打开连接,它将检查池。如果可以找到具有相同连接字符串的现有连接,则会从池中返回该连接,因此安装时间非常短

当您关闭连接时,它将返回到池中

这是非常有效的,并使连接到数据库的速度非常快

编辑

下面是一篇关于这个主题的MSDN文章

这是可能的

 public class MyClass:IDisposable
{
    SqlConnection myCon;

    public MyClass() 
    {
        myCon = new SqlConnection(connectionString);
    }

    public DataTable GetList()
    {
        // use global connection
    }

    public void Insert()
    {
        // use global connection
    }



    public void Dispose()
    {
        myCon.Close();
    }
}
使用:

 using (MyClass myclass = new MyClass())
        {
           DataTable dt = myclass.GetList();
        }
这是可能的

 public class MyClass:IDisposable
{
    SqlConnection myCon;

    public MyClass() 
    {
        myCon = new SqlConnection(connectionString);
    }

    public DataTable GetList()
    {
        // use global connection
    }

    public void Insert()
    {
        // use global connection
    }



    public void Dispose()
    {
        myCon.Close();
    }
}
使用:

 using (MyClass myclass = new MyClass())
        {
           DataTable dt = myclass.GetList();
        }

他在第一个片段中使用的模式在我看来很好。DbConnection实现了IDisposable,它在using语句末尾关闭了连接。@AliRızaAdıyahşi我在回答中添加了一个指向MSDN文章的链接。谢谢,我以前读过它,但我不明白,在你的评论之后我又读了一遍,现在我基本上明白了……太好了。这是一个非常值得理解的主题,因为保持连接打开最终会导致连接池耗尽,并且您的应用程序可能会停止工作:(他在第一个片段中使用的模式在我看来很好。DbConnection实现IDisposable,在using语句末尾关闭连接。@AliRızaAdıyahşi我在我的回答中添加了一个指向MSDN文章的链接。谢谢,我以前读过它,但我不明白,在你的评论之后我又读了一遍,现在我基本上明白了……太好了。太好了一个非常值得理解的主题,因为保持连接打开最终可能会耗尽连接池,并且您的应用程序可能会停止工作:(好的示例。虽然它回答了这个问题,但它也解释了一次性类的“using”关键字的用法好的示例。虽然它回答了这个问题,但它也解释了“using”的用法一次性类的关键字