1

我用 C# 编写我的数据库命令如下

 using (SqlConnection con = new SqlConnection(Config.ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("INSERT INTO ProjectDetails(pro_name,pro_location,pro_briefdesc,pro_desc,pro_res,pro_contact,pro_add,pro_email,pro_phone) VALUES (@name,@loc,@brief,@desc,@res,@cont,@add,@email,@ph)", con))
            {
                cmd.Parameters.AddWithValue("@name",pro_name);
                cmd.Parameters.AddWithValue("@loc",pro_location );
                cmd.Parameters.AddWithValue("@brief",pro_briefdesc);
                cmd.Parameters.AddWithValue("@desc", pro_desc);
                cmd.Parameters.AddWithValue("@res",pro_res);
                cmd.Parameters.AddWithValue("@cont",pro_contact);
                cmd.Parameters.AddWithValue("@add",pro_add);
                cmd.Parameters.AddWithValue("@email",pro_email);
                cmd.Parameters.AddWithValue("@ph",pro_phone );
                con.Open();
                int modified = cmd.ExecuteNonQuery();
                if (con.State == System.Data.ConnectionState.Open) con.Close();
                return modified;

            }

        }

我怎样才能写我的连接打开和关闭通常 - 即最少的代码重复(重复)。

4

2 回答 2

5

With the using-statement you don't need to close the connection because it is closed from Dispose.

using (SqlConnection con = new SqlConnection(Config.ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand("INSERT INTO ProjectDetails(pro_name,pro_location,pro_briefdesc,pro_desc,pro_res,pro_contact,pro_add,pro_email,pro_phone) VALUES (@name,@loc,@brief,@desc,@res,@cont,@add,@email,@ph)", con))
    {
        cmd.Parameters.AddWithValue("@name",pro_name);
        // ...
        con.Open();
        int modified = cmd.ExecuteNonQuery();
        //con.Close(); <-- not necessary
        return modified;
    }
}
于 2013-06-19T13:26:00.080 回答
1

您的代码没问题,您不必担心连接打开或关闭的频率。

ADO.NET 使用连接池来重用空闲连接,并且只有在所有以前的连接都在使用时才创建一个新连接。由于以下原因,这将性能提高了几个数量级:

  • 您无需支付打开/关闭实际服务器连接的费用
  • 当您释放连接时,任何剩余的服务器锁都会被释放,即使实际连接仍然存在。这意味着更少的死锁和等待。

事实上,在你需要它之​​前打开一个连接并在你完成它后立即处理它是一件非常好的事情。

这不是一个新功能。它一直追溯到 ADO 和 OLE DB。

最后,您可以使用大多数 ADO.NET 和 OLE DB 提供程序的连接字符串参数来控制池中保留的最小和最大连接数。这在服务器应用程序中非常有用。

通过设置最小数量,您可以确保您的应用程序有足够的连接来处理其典型负载,而不会浪费时间在新请求进入时打开新连接。设置最大数量可确保您不会获得太多的服务器锁,以至于您的客户端最终等待大部分时间彼此。

于 2013-06-19T13:37:38.763 回答