任何人都可以向我简要介绍如何在ADO.Net中进行连接池,我需要连接到3个独立的数据库.其中2个在同一服务器中,另一个在另一个服务器中.
更好的代码片段..
我正在帮助调试一些代码并具有以下for循环.它是否在每次迭代时打开和关闭与数据库的连接?
for (int i = 0; i < count; i++)
{
int num = dataTable.Rows[i]["Location_Id"]
database.ProcessAlerts("spProcessAlerts", num)
}
Run Code Online (Sandbox Code Playgroud)
从数据库类,这里是相关部分:
public bool GetConnection()
{
try
{
GeneralLib.GetIniSettings();
string connectionStrings = GeneralLib.Settings.ConnectionStrings;
Database.conn = new SqlConnection(connectionStrings);
Database.conn.Open();
}
...
public void ProcessAlerts(string ProcedureName, int nByLocationId)
{
try
{
if (this.GetConnection())
{
SqlCommand sqlCommand = new SqlCommand(ProcedureName, Database.conn);
sqlCommand.CommandType = CommandType.StoredProcedure;
SqlParameter sqlParameter = sqlCommand.Parameters.Add("@ByLocation_Id", SqlDbType.Int);
sqlParameter.Value = nByLocationId;
sqlCommand.ExecuteNonQuery();
this.CloseConnection();
}
}
Run Code Online (Sandbox Code Playgroud)
我的直觉让我相信for循环在每次迭代时打开/关闭,但由于我根本不使用.net,我真的不知道.我已经搜索了很多关于这一点,并没有找到一个令人满意的答案(如执行时间较慢,每次迭代相同的SPROC,保持Sql连接打开以迭代许多请求?或关闭每一步?,打开和关闭数据库连接对于每个查询和C#SQLConnection池).有些帖子说当你需要它时打开连接并立即关闭它,而其他人说如果你使用连接池,连接并没有真正关闭,它只是不可用.我不完全理解这一点.
基本上这段代码应该处理信息,以便可以发送警报,并且我们最近在这个过程中经历了很长的时间延迟.从日志中我可以看到for循环开始/停止的时间,并且有时需要几个小时才能遍历几千条记录.也可能是spProcessAlerts花了很多时间来运行某些行,所以我也在研究那里发生的事情.