小编典典

C#SQL创建一个连接并为每个查询打开和关闭

sql

我最近继承了一个C#Web应用程序,该应用程序为每个查询创建了一个新连接,如下所示:

public class QueryForm
{
    public bool getStudents()
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        conn.Open();
        //commands
        conn.Close();
    }

    protected void getProfessors()
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        conn.Open();
        //Commands
        conn.Close();
    }


    protected void getProfessors()
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        conn.Open();
        //Commands
        conn.Close();
    }
}

我知道这通常是最好的方法,但是让构造函数创建连接对象,然后打开每个方法/查询,然后关闭该连接,是可以接受的还是“最佳实践”,如下所示:

public class QueryForm
{
    SqlConnection conn;

    public QueryForm()
    {
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
    }

    public bool getStudents()
    {
        conn.Open();
        //commands
        conn.Close();
    }

    protected void getProfessors()
    {
        conn.Open();
        //Commands
        conn.Close();
    }

    protected void getCourses()
    {
        conn.Open();
        //Commands
        conn.Close();
    }
}

我更喜欢第二种方法,因为它不会创建多个连接对象。但是,如果我将方法和类设为静态,则第一种方法也将是更可取的。


阅读 151

收藏
2021-04-22

共1个答案

小编典典

这些中的任何一个都是可以接受的。ASqlConnection使用连接池,因此不会对性能造成太大影响。拥有多个SqlConnection对象不会伤害任何事情。这归结为偏好。

using如果您将连接保留在方法内部,则建议将命令封装在语句中,例如:

using (SqlConnection conn = new SqlConnection(...))
{
    conn.Open();
    //commands
    conn.Close();
}

这样可以确保正确处理连接。

2021-04-22