When I run my code I get the following exception:
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
Additional information: Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
My code is the following:
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";
}
And my SQLstring is the following:
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]
If your query needs more than the default 30 seconds, you might want to set the CommandTimeout higher. To do that you'll change it after you instantiated the DataAdapter on the SelectCommand property of that instance, like so:
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";
}
The other option is to address your query. In Sql Server you can analyze the execution plan. I bet there is a full-table scan in it. You might experiment with adding an index on one or two columns in your [old]
and [new]
table. Keep in mind that adding indexes comes at the cost of higher execution times for inserts and updates and space requirements.