执行超时已过期。操作完成前超时时间已过或服务器未响应
Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding
当我 运行 我的代码时,我得到以下异常:
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.
我的代码如下:
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服务器中你可以分析execution plan。我敢打赌里面有一个完整的 table 扫描。您可以尝试在 [old]
和 [new]
table 中的一个或两个列上添加索引。请记住,添加索引是以插入和更新的执行时间更长以及 space 要求为代价的。
当我 运行 我的代码时,我得到以下异常:
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.
我的代码如下:
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服务器中你可以分析execution plan。我敢打赌里面有一个完整的 table 扫描。您可以尝试在 [old]
和 [new]
table 中的一个或两个列上添加索引。请记住,添加索引是以插入和更新的执行时间更长以及 space 要求为代价的。