お世話になります。
SQLServerからデータを取得するプログラムをC#のWindowsFormで作成しています。
環境
クライアントWindows10 1909
データベースSQLServer2019
開発言語C# .NetFramework4.7.2
発生している問題
起動時にDLLの接続オブジェクト(SQLConnection)をオープンし、
そのオブジェクトをWindowsFormアプリケーションで起動から終了まで利用しています。
大体30秒~40秒ぐらいの感覚でExecuteReaderメソッドが2秒ほど止まります。
7/31追記
テストプログラムを作成し、3分ほど5秒間隔でExecuteReader()を実行して、実行する前と後で、時間を出力しています。下記のような感じです。 09:46:00 ExecuteReader() 09:46:00
09:45:55 ExecuteReader() 09:45:57
09:45:50 ExecuteReader() 09:45:50
真ん中のように30秒程度の間隔でメソッドの前後で2秒ほど空きます。
該当のソースコード
□DLL内
System.Data.SqlClient.SqlConnection cnc = new System.Data.SqlClient.SqlConnection();
cnc.ConnectionString = "Data Source=[サーバー名];Initial Catalog=[データベース名];User ID=[ユーザーID];Password=[パスワード];";
cnc.Open();
□WindowsFormプログラム内
private void Button_Click(object sender, EventArgs e)
{
System.Data.SqlClient.SqlCommand cmd = cnc.CreateCommand();
cmd.ComandText = "SELECT TOP1 * FROM [テーブル] WHERE [コード] = 1";
System.Data.SqlClient.SqlDataReader rst = cmd.ExecuteReader(); //30秒に一回ぐらいここで2秒ほど止まる
}
7/31追記
下記のようなテストコードで再現
private void Button_Click(object sender, EventArgs e)
{
test a = new test();
a.Read();
}
class test
{
void read()
{
System.Data.SqlClient.SqlConnection cnc = new System.Data.SqlClient.SqlConnection();
cnc.ConnectionString = [接続文字列];
cnc.Open();
System.Data.SqlClient.SqlCommand cmd = cnc.CreateCommand();
cmd.ComandText = "SELECT TOP1 * FROM [テーブル] WHERE [コード] = 1";
System.Data.SqlClient.SqlDataReader rst = cmd.ExecuteReader(); //30秒に一回ぐらいここで2秒ほど止まる
rst.Close();
cnc.Close();
}
}
ただし、イベントに直接記述するとならない
private void Button_Click(object sender, EventArgs e)
{
System.Data.SqlClient.SqlConnection cnc = new System.Data.SqlClient.SqlConnection();
cnc.ConnectionString = [接続文字列];
cnc.Open();
System.Data.SqlClient.SqlCommand cmd = cnc.CreateCommand();
cmd.ComandText = "SELECT TOP1 * FROM [テーブル] WHERE [コード] = 1";
System.Data.SqlClient.SqlDataReader rst = cmd.ExecuteReader(); //30秒に一回ぐらいここで2秒ほど止まる
rst.Close();
cnc.Close();
}
試したこと
接続文字列に"ConnectionTimeout=0;" 追記
接続文字列に"ConnectRetryInterval=1;" 追記
ネットワークドライバの更新
ネットワークドライバの変更
補足情報
SQLServer2019の入ってるサーバーでアプリを実行しても同様の現象が出るが、LANケーブルを抜くと出ない。
ネットワーク環境によって挙動が変わったので追記します。
SQLServerにWinformアプリを入れてLANケーブルをささずに検証・・・OK
SQLServerにLANケーブルをさす・・・NG
接続先のネットワークにWindowsのDC追加・・・OK
回答1件
あなたの回答
tips
プレビュー