我有一个非常奇怪的例子,来自用C#.NET编写的应用程序的SQL连接超时。
SqlCommand.ExecuteNonQuery()
用于在SQL Server中依次执行多个脚本。每个脚本都包含一个只创建一个表的命令(根本没有数据更新/插入/删除操作)。出于某种原因,在其中一个脚本中,SqlCommand.ExecuteNonQuery
会引发超时异常。
当我在SQL Server Management Studio中执行所有这些表的创建时,它们会很好地执行,几乎是即时的。
有人知道从应用程序创建表时可能导致超时的原因吗?
所有sql脚本看起来类似如下:
SQL:
create table dbo.Test
(
Code varchar(10) not null
, Name varchar(50) not null
, other columns...
primary key
, unique key
, foreign key
)
脚本使用以下代码从C#发货:
try
{
using (SqlConnection conSQL = new SqlConnection ("[connection string]"))
{
using (SqlCommand cmdSQL = new SqlCommand(sSQL, conSQL))
{
cmdSQL.CommandTimeout = iTimeOut;
conSQL.Open();
cmdSQL.ExecuteNonQuery(); // this is where it jumps to catch part and
// throws out timeout exception
conSQL.Close();
}
}
}
catch(Exception ex)
{
throw (ex);
}
这发生在测试服务器上,这意味着当应用程序执行这些脚本时,服务器上不会发生任何其他事情。
答案 0 :(得分:1)
您可以通过更新machine.config
来覆盖sql事务的默认超时设置,可在此处找到:
%windir%\Microsoft.NET\Framework\[version]\config\machine.config
64位
%windir%\Microsoft.NET\Framework64\[version]\config\machine.config
在machine.config
结束时添加或更新以下行:
<system.transactions>
<machineSettings maxTimeout="01:00:00" /> --> set this to desired value.
</system.transactions>
</configuration>
如果以上操作不起作用,您也可以通过代码为Timeout setting
指定SqlCommand
:
using (SqlConnection connection = new SqlConnection(connectionString)) {
connection.Open();
SqlCommand command = new SqlCommand(queryString, connection);
// Setting command timeout in seconds:
command.CommandTimeout = 3600;
try {
command.ExecuteNonQuery();
}
catch (SqlException e) {
Console.WriteLine(e);
}
}
更多信息here
答案 1 :(得分:0)
只是阻止它运行并再次运行你的问题将得到解决....它通常是第一次出现时,他们的很多文件加载也许它是视觉工作室的错误。 新: 停止后尝试刷新打开的网页(在显示错误的浏览器中),而不是重新启动它...