間に行をフェッチするための開始インデックスと終了インデックスを持つストアド プロシージャを作成しました
例えば
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」メソッド内で使用しているすべての変数は他のプロセスと共有できず、1 つのスレッドがすべてのロック変数を解放するのを待つことができないため、ここではロックを使用できません。