【问题标题】:C# SQL connection timeoutC# SQL 连接超时
【发布时间】:2016-06-20 12:23:52
【问题描述】:

我遇到一个用 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);
}            

这发生在测试服务器上,这意味着当应用程序执行这些脚本时,服务器上没有发生任何其他事情。

【问题讨论】:

  • 我们需要查看您的相关c#代码和sql查询。
  • 试试cmdSQL.CommandTimeout = 0;
  • 你同意sql脚本很简单吧?我只是不明白为什么这个脚本会超时,而其他脚本不会。需要注意的是,Test sql server 上没有运行其他任何东西,iTimeOut 值为 30 秒。

标签: c# sql asp.net sql-server timeout


【解决方案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> 

如果上面的方法不行,你也可以通过代码为SqlCommand指定Timeout setting

  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 分钟,但没有任何帮助。在我看来,设置为更高的值并不好。我正在尝试找出发生这种情况的原因
  • 我相信默认是 10 分钟?所以不知道为什么你认为超过 1 分钟是不好的。但是向我们展示导致它的脚本代码,也许我们可以看到发生了什么?
  • 你能用相关的c#代码(你在哪里调用这些sql查询)和一个示例查询来更新你的答案吗?
  • 我只想说这是一个非常简单的脚本,在管理工作室中执行不到 1 秒。让它在 1 分钟或更长时间内执行有点过分。除此之外应该还有其他选择...
  • 您的 iTimeout 的价值是多少?如果太低会导致超时错误。
【解决方案2】:

只需停止运行并再次运行,您的问题就会得到解决.... 通常只有在需要加载大量文件时才第一次发生,也许这是 Visual Studio 中的错误。 新的: 停止后尝试刷新打开的网页(在显示错误的浏览器中)而不是重新启动它......

【讨论】:

  • 我已经这样做了几次,每次重新启动应用程序都会出现问题。
猜你喜欢
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 2021-05-12
  • 2018-05-25
  • 1970-01-01
相关资源
最近更新 更多