C# 使用一个 SqlConnection 进行多个查询
C# Using one SqlConnection for multiple queries
如何正确使用一个 SqlConnection
对象进行多个查询?
SqlConnection connection = new SqlConnection(connString);
static void SqlQuery(SqlConnection conn, string cmdString)
{
using (conn)
{
if (conn.State != ConnectionState.Open)
{
conn.Close();
conn.Open();
}
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = cmdString;
cmd.ExecuteNonQuery();
}
}
函数 SqlQuery
在第一次调用后抛出 System.InvalidOperationException
"ConnectionString property not initialized"
总之不要做
创建 class SqlConnection
的新实例不会创建到 SQL 服务器的新网络连接,但会租用现有连接(或创建新连接)。 .NET 为您处理物理连接池。
当您完成连接(通过它您可以发送多个查询)后,只需 Close()
或 Dispose()
(或者最好使用 using{}
块)。
缓存 SqlConnection 的实例没有必要,也不是好的做法class。
更新
这是您方法的更好模式,您不必担心连接状态
static void SqlQuery(string cmdString)
{
using (var connection = new SqlConnection(connString))
using (var cmd = connection.CreateCommand(cmdString, connection))
{
connection.Open();
// query
cmd.ExecuteNonQuery();
}
}
这取决于您真正 mean/intend 做什么。如果你的意思是batching一组命令?那么是的,
- 它可以说更好 to use one connection。是的,连接池确实拯救了我们(所有人),但如果你真的想过它,它有什么作用?是的,它 重用 个连接...
- Performing Batch Operations
- tips/pointers on
SqlCommand
还有
Hth.
如何正确使用一个 SqlConnection
对象进行多个查询?
SqlConnection connection = new SqlConnection(connString);
static void SqlQuery(SqlConnection conn, string cmdString)
{
using (conn)
{
if (conn.State != ConnectionState.Open)
{
conn.Close();
conn.Open();
}
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = cmdString;
cmd.ExecuteNonQuery();
}
}
函数 SqlQuery
在第一次调用后抛出 System.InvalidOperationException
"ConnectionString property not initialized"
总之不要做
创建 class SqlConnection
的新实例不会创建到 SQL 服务器的新网络连接,但会租用现有连接(或创建新连接)。 .NET 为您处理物理连接池。
当您完成连接(通过它您可以发送多个查询)后,只需 Close()
或 Dispose()
(或者最好使用 using{}
块)。
缓存 SqlConnection 的实例没有必要,也不是好的做法class。
更新
这是您方法的更好模式,您不必担心连接状态
static void SqlQuery(string cmdString)
{
using (var connection = new SqlConnection(connString))
using (var cmd = connection.CreateCommand(cmdString, connection))
{
connection.Open();
// query
cmd.ExecuteNonQuery();
}
}
这取决于您真正 mean/intend 做什么。如果你的意思是batching一组命令?那么是的,
- 它可以说更好 to use one connection。是的,连接池确实拯救了我们(所有人),但如果你真的想过它,它有什么作用?是的,它 重用 个连接...
- Performing Batch Operations
- tips/pointers on
SqlCommand
还有
Hth.