由于我遇到了一些问题,我在.NET Framework 4中进行连接池实验。使用SQL Profiler,我可以看到每次从连接池中获取连接时都会执行存储过程sp_reset_connection。
为了摆脱这个重置(实际上我不需要sp_reset_connection),我尝试将连接字符串中的Connection Reset参数设置为false,但是这似乎没有任何效果。我认为可能是我误解了Connection reset参数的作用。
我注意到连接重置参数在http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx中没有记录。但是它在许多其他地方提到,例如http://www.techrepublic.com/article/educate-yourself-about-net-sql-server-connection-string-syntax/6084879。
如果我将Connection Reset标志设置为无效值(例如'hello'),那么在打开连接时就会引发异常,表明Connection Reset标志实际上被使用。
ADO.NET是否真正关心Connection reset标志?
以下是我的代码:
为了摆脱这个重置(实际上我不需要sp_reset_connection),我尝试将连接字符串中的Connection Reset参数设置为false,但是这似乎没有任何效果。我认为可能是我误解了Connection reset参数的作用。
我注意到连接重置参数在http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx中没有记录。但是它在许多其他地方提到,例如http://www.techrepublic.com/article/educate-yourself-about-net-sql-server-connection-string-syntax/6084879。
如果我将Connection Reset标志设置为无效值(例如'hello'),那么在打开连接时就会引发异常,表明Connection Reset标志实际上被使用。
ADO.NET是否真正关心Connection reset标志?
以下是我的代码:
static void Main(string[] args)
{
const string connectionString =
"Data Source=(local);Initial Catalog=MyDatabse;User ID=sa;Password=<removed>;Connection Timeout=5;Pooling=true;Min Pool Size=1; Max Pool Size=1; Enlist=false; Connection Reset=false;";
var connections = new List<SqlConnection>();
for (int i = 0; i < 1000000; i++)
{
using (var conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand command = new SqlCommand("SELECT * FROM DatabaseVersion", conn);
command.ExecuteNonQuery();
connections.Add(conn);
}
}
}