- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于我遇到了一些问题,我正在 .NET Framework 4 中尝试连接池。使用 SQL Profiler,我可以看到每次从连接池中获取连接时,都会执行存储过程 sp_reset_connection。
要摆脱此重置(我实际上不需要 sp_reset_connection)。我尝试将连接字符串中的 Connection Reset 参数设置为 false,但这似乎没有任何效果。我想也许我误解了连接重置参数的目的。
我注意到连接重置参数没有记录在 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 .
如果我将连接重置标志设置为无效值(例如“hello”),则在打开连接时会出现异常,表明实际使用了连接重置标志。
ADO.NET 真的关心连接重置标志吗?
我的代码如下:
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);
}
}
}
最佳答案
SqlClient 会验证连接重置
标志(它必须可转换为 bool 值)。但自 .NET 3.5 SP1 起,该值被忽略。
此外,SqlConnectionStringBuilder.ConnectionReset property在 .NET 3.5 SP1 中已过时。
原因是设置Connection Reset = false
是一个巨大的安全漏洞 - 它可能允许重用与其关联的敏感元素(例如打开的对称 key 、临时 key 或模拟)的 session 语境。此外,它可能已将 ChangeDatabase
执行到另一个数据库,因此当您重新打开它时,它将连接到“错误”的数据库。
设置Connection Reset = false
的唯一好处是由于避免了往返而提高了 SQL Server 7.0 的性能。
连接重置
记录在.NET 3.0 docs中。我认为它从 3.5 SP1 文档及更高版本中删除的原因是因为它现在什么都不做。
关于.net - 禁用 sp_reset_connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927321/
由于我遇到了一些问题,我正在 .NET Framework 4 中尝试连接池。使用 SQL Profiler,我可以看到每次从连接池中获取连接时,都会执行存储过程 sp_reset_connectio
sp_reset_connection 似乎由 SQL Server 连接池调用,以确保从池中重用的连接重置大部分设置。有谁确切知道它做什么和不做什么? 例如我从 this post 看到它不会重置事
我的分析器跟踪显示 exec sp_reset_connection在每个 sql 批处理或过程调用之间调用。有reasons for it ,但是如果我确信它是不必要的,我可以防止它被调用以提高性能
我有一个 .NET 4.0 Winform 和一个 .NET 4.0 Windows 服务,它们都通过 LINQ to SQL 连接到 SQL 2005/2008 数据库。它在我们的测试环境中运行良好
这个问题已经有答案了: What does sp_reset_connection do? (2 个回答) 已关闭 4 年前。 社区去年审查了是否重新开放此问题,并将其关闭: 原始关闭原因未解决 尝试
根据我读到的有关“exec sp_reset_connection”的信息,当连接池存在时,它出现在 SQL Server Profiler 跟踪数据中,从要考虑的跟踪数据中删除/排除它似乎是安全的(
我是一名优秀的程序员,十分优秀!