我最近继承了一个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(); } }
我更喜欢第二种方法,因为它不会创建多个连接对象。但是,如果我将方法和类设为静态,则第一种方法也将是更可取的。
这些中的任何一个都是可以接受的。ASqlConnection使用连接池,因此不会对性能造成太大影响。拥有多个SqlConnection对象不会伤害任何事情。这归结为偏好。
SqlConnection
using如果您将连接保留在方法内部,则建议将命令封装在语句中,例如:
using
using (SqlConnection conn = new SqlConnection(...)) { conn.Open(); //commands conn.Close(); }
这样可以确保正确处理连接。