我正在使用连接到我的计算机上的本地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.
还是有“更好”的方式来处理数据库连接?
我很感激任何意见。
答案 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'子句!