マルチスレッド アプリケーションを使用してデータベースからデータを抽出していますが、数分間実行すると、この例外または SQL タイムアウト例外が発生し始めます。私のコードは以下の通りです:
public static List<FlightInfo> FlightInfoAllPricesPerDayForRoute(string From, string To)
{ // Create the object array from the datareader
List<FlightInfo> arr = new List<FlightInfo>();
using (var conn = new SqlConnection(sConnectionString))
{
using (var command = new SqlCommand("FlightInfoAllPricesPerDayForRoute", conn)
{
CommandType = CommandType.StoredProcedure
})
{
conn.Open(); command.CommandTimeout = 150;
command.Parameters.AddWithValue("AirportFrom", From);
command.Parameters.AddWithValue("AirportTo", To);
// command.Parameters.AddWithValue("Date", dt);
//execute the stored procedure
using (IDataReader dr = command.ExecuteReader())
{
FlightInfo obj;
while (dr.Read())
{
obj = new FlightInfo();
obj.flightInfoID = (int)dr["FlightInfoID"];
obj.airportFrom = (string)dr["AirportFrom"];
obj.airportTo = (string)dr["AirportTo"];
obj.timeDeparture = DateTime.Parse(dr["TimeDeparture"].ToString());
obj.timeArrival = (DateTime)dr["TimeArrival"];
obj.price = (short)Int16.Parse(dr["Price"].ToString());
obj.dateAdded = (DateTime)dr["DateAdded"];
obj.carrier = (string)dr["Carrier"];
arr.Add(obj);
}
dr.Close(); dr.Dispose(); conn.Close(); conn.Dispose(); command.Dispose();
}
}
} return arr;
}
タイムアウトの問題を改善するために接続文字列に以下を追加しましたが、まだエラーが発生しています:
Min Pool Size=200;Max Pool Size=32767;Asynchronous Processing=true; Connect Timeout=150;
ストアド プロシージャは非常に単純なので、問題はないと思います。
select *, DATEADD(dd, 0, DATEDIFF(dd, 0, TimeDeparture)) as FlightDate
from FlightInfo
where AirportFrom = @AirportFrom and AirportTo = @AirportTo
AND TimeDeparture > GETDATE() -- Only get future flights
Order by FlightDate ASC, Price asc
SQL接続を確認するためにこれを実行しようとしましたが、「ユーザーにはこのアクションを実行する権限がありません.」というメッセージが表示されます. エラー
SELECT * FROM sys.dm_exec_connections
任意の提案をいただければ幸いです!