【发布时间】:2018-12-25 15:31:26
【问题描述】:
在使用 ADO.Net C# 连接 SQL 数据库时,我在同时处理数千个数据时随机出现异常,这些数据正在线程中执行,例如
已成功与服务器建立连接,但在登录前握手期间发生错误。 (提供者:SSL Provider,错误:0 - 等待操作超时。)
由于登录前连接初始化过程出错,客户端无法建立连接。可能的原因包括:客户端尝试连接到不受支持的 SQL Server 版本;服务器太忙而无法接受新连接;或者服务器上存在资源限制(内存不足或允许的最大连接数)。 (提供者:TCP Provider,错误:0 - 现有连接被远程主机强行关闭。)
超时。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且已达到最大池大小。
我的连接字符串是
<add name="ConnDBString" connectionString="datasource;Initial Catalog=dbname;pooling=true;connection lifetime=120;Max Pool Size=1000" providerName="System.Data.SqlClient"/>
在参考其他问题时,我已经优化了我的代码以建立连接,如下所示
public static int ExecuteNonQuery(string commandText, CommandType commandType, ref List<SqlParameter> parameters)
{
int result = 0;
if (!string.IsNullOrEmpty(commandText))
{
using (var cnn = new SqlConnection(Settings.GetConnectionString()))
{
var cmd = cnn.CreateCommand();
cmd.CommandText = commandText;
cmd.CommandType = commandType;
cmd.CommandTimeout = Convert.ToInt32(Settings.GetAppSetting("CommandTimeout") ?? "3600");
cmd.Parameters.AddRange(parameters.ToArray());
cnn.Open();
result = cmd.ExecuteNonQuery();
cmd.Dispose();
}
}
return result;
}
请指教。
【问题讨论】:
-
你的数据库服务器内存不足了吗?
-
是的,有时会这样。
-
这听起来和你的第二个要点很一致?
-
是否还有其他可能导致这些问题而不是 RAM 不足?
-
是的 - 例如,您与数据库的连接可能比服务器可以处理的要多。发生这种情况的原因有很多。
标签: c# ado.net console-application sql-server-2014