使用C#连接数据库的正确方法

时间:2014-01-30 11:19:09

标签: c# sql-server database-design connection database-connection

我正在使用连接到我的计算机上的本地SQL Server数据库的应用程序。我有许多SQL查询当前使用不同的方法执行正常。我的问题是关于打开/关闭不同方法之间的数据库连接。

我有两种方法看起来像这样:

Class MyClass
{
    string connectionString = "myConnectionString";

    public void Method1()
    {
        SqlConnection con = new SqlConnection(connectionString);
        con.Open();
        string sqlStr = "my SQL query";
        SqlCommand com = new SqlCommand(sqlStr, con);
        com.ExecuteNonQuery();
        con.Close();
    }

    public void Method2()
    {
        SqlConnection con = new SqlConnection(connectionString);
        con.Open();
        string sqlStr = "my SQL query";
        SqlCommand com = new SqlCommand(sqlStr, con);
        com.ExecuteNonQuery();
        con.Close();
    }
}

如果我称这些方法,它们可以正常工作,没有例外。但这是处理数据库连接的正确方法吗?例如,我可以使用在MyClass初始化后立即初始化的静态连接吗?喜欢这个

Class MyClass
{
    string connectionString = "myConnectionString";
    SqlConnection con = new SqlConnection(connectionString);
    con.Open();

    public void Method1()
    {
        ...
    }
    etc.

还是有“更好”的方式来处理数据库连接?

我很感激任何意见。

2 个答案:

答案 0 :(得分:3)

每当您使用IDisposable个实例时,您宁愿使用

public void Method3() {
  string sqlStr = "my SQL query";

  // Do not forget to configure connection pull so that
  // establishing a connection will not be expensive 
  using (SqlConnection con = new SqlConnection(connectionString)) {
    con.Open();

    using (SqlCommand com = new SqlCommand(sqlStr, con)) {
      com.ExecuteNonQuery();
    }
  }
}

如果您愿意,可以组合查询:

    public void Method4() {
      string sqlStr1 = "my SQL query 1";
      string sqlStr1 = "my SQL query 2";

      // Do not forget to configure connection pull so that
      // establishing a connection will not be expensive 
      using (SqlConnection con = new SqlConnection(connectionString)) {
        con.Open();

        // Think on having both queries executed in one transaction
        using (SqlCommand com1 = new SqlCommand(sqlStr1, con)) {
          com1.ExecuteNonQuery();
        }

        using (SqlCommand com2 = new SqlCommand(sqlStr2, con)) {
          com2.ExecuteNonQuery();
        } 
      }
    }

静态连接可能很难维护,尤其是如果您正在实施多线程软件,那就是避免使用它们的原因

答案 1 :(得分:0)

不要使用静态连接,请检查数据库连接字符串以启用连接池。连接池是否控制连接,将其保持打开状态直到超时(提高性能)并在不需要时关闭它。 对每个一次性物品使用'using'子句!