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

时间:2013-02-14 13:51:27

标签: c# ado.net

我有类似的事情

...
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

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

2 个答案:

答案 0 :(得分:3)

可能

 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();
        }

答案 1 :(得分:2)

好吧,既然您使用的是SQL Server,那么保持连接打开并不是一种好的做法。

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

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

这非常有效,可以非常快速地连接到数据库。

修改

这是关于该主题的MSDN文章。 http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx