我创建了一个带有开始和结束索引的存储过程来获取中间的行
例如
Create Procedure ProcA
@StartIndex int,
@EndIndex int
As
Begin
Select * from Table A where Rowno between @StartIndex and @EndIndex
End
现在我需要同时使用多个线程从 C# 获取行,
这是我的代码,
public static DataTable ReadRecord(int startindex)
{
SqlConnection SqlConn = new SqlConnection(Connectionstr);
if (SqlConn.State == ConnectionState.Closed)
{
SqlConn.Open();
}
DataTable Dt = new DataTable();
SqlCommand SqlCmd = new SqlCommand("USP_InstinctBPDataTest", SqlConn);
SqlCmd.CommandType = CommandType.StoredProcedure;
SqlCmd.Parameters.AddWithValue("@SRow", startindex);
SqlCmd.Parameters.AddWithValue("@ERow", startindex + 2499);
SqlDataAdapter Da = new SqlDataAdapter();
Da.SelectCommand = SqlCmd;
Da.Fill(Dt);
return Dt;
}
我尝试过创建多个线程,例如,
List<ThreadStart> threadStartsList = new List<ThreadStart>();
ThreadStart ts = delegate() { ReadRecord(1); };
threadStartsList.Add(ts);
ThreadStart ts1 = delegate() { ReadRecord(2501); };
threadStartsList.Add(ts1);
Thread[] tsarr = new Thread[2];
int i = 0;
foreach (ThreadStart tsl in threadStartsList)
{
tsarr[i] = new Thread(tsl);
tsarr[i].Start();
i++;
}
for (int j = 0; j < tsarr.Length; j++)
{
tsarr[j].Join();
}
我正在使用 .Net 框架 3.5。我需要同时运行线程并等待它完成进程。但是我得到关于连接池的异常在没有运行的情况下达到了最大值。
我不能在这里使用锁,因为我在“ReadRecord”方法中使用的所有变量都不能与其他进程共享,也不能等待一个线程释放所有锁变量。