コードを実行すると、次の例外が発生します。
タイプSystem.Data.SqlClient.SqlExceptionの未処理の例外がSystem.Data.dllで発生しました
追加情報:実行タイムアウトの期限が切れました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。
私のコードは次のとおりです:
private void FillInDataGrid(string SQLstring)
{
string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString; //hier wordt de databasestring opgehaald
SqlConnection myConnection = new SqlConnection(cn);
SqlDataAdapter dataadapter = new SqlDataAdapter(SQLstring, myConnection);
DataSet ds = new DataSet();
myConnection.Open();
dataadapter.Fill(ds, "Authors_table");
myConnection.Close();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Authors_table";
}
そして私のSQLstringは次のとおりです:
SELECT dbo.[new].[colom1],dbo.[new].[colom2],dbo.[new].[colom3],dbo.[new].[colom4],
dbo.[new].[Value] as 'nieuwe Value',
dbo.[old].[Value] as 'oude Value'
FROM dbo.[new]
JOIN dbo.[old] ON dbo.[new].[colom1] = dbo.[old].[colom1] and dbo.[new].[colom2] = dbo.[old].[colom2] and dbo.[new].[colom3] = dbo.[old].[colom3] and dbo.[new].[colom4] = dbo.[old].[colom4]
where dbo.[new].[Value] <> dbo.[old].[Value]
クエリでデフォルトの30秒を超える時間が必要な場合は、 CommandTimeout を高く設定することをお勧めします。そのためには、そのインスタンスのSelectCommandプロパティでDataAdapterをインスタンス化した後で、次のように変更します。
private void FillInDataGrid(string SQLstring)
{
string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString; //hier wordt de databasestring opgehaald
DataSet ds = new DataSet();
// dispose objects that implement IDisposable
using(SqlConnection myConnection = new SqlConnection(cn))
{
SqlDataAdapter dataadapter = new SqlDataAdapter(SQLstring, myConnection);
// set the CommandTimeout
dataadapter.SelectCommand.CommandTimeout = 60; // seconds
myConnection.Open();
dataadapter.Fill(ds, "Authors_table");
}
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Authors_table";
}
他のオプションは、クエリに対処することです。 SQL Serverでは、 実行計画 を分析できます。その中に全表スキャンがあるに違いない。 [old]
テーブルと[new]
テーブルの1つまたは2つの列にインデックスを追加してみてください。インデックスを追加すると、挿入と更新の実行時間が長くなり、必要な領域が増えることに注意してください。