Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从程序中选择超时,但从SQLServerManagementStudio中选择超时_C#_Sql_Sql Server - Fatal编程技术网

C# 从程序中选择超时,但从SQLServerManagementStudio中选择超时

C# 从程序中选择超时,但从SQLServerManagementStudio中选择超时,c#,sql,sql-server,C#,Sql,Sql Server,我在执行SQL SELECT时超时 我通过以下方式连接到数据库: using (SQLConnection conn = SQLConnection(@"Data Source=mydbServer;Initial Catalog=mydb;Integrated Security=true;Timeout=180"); { conn.Open(); 这就成功地连接了 在using{}I集合内: string query = @"SELECT a.field, a.timestamp "

我在执行SQL SELECT时超时

我通过以下方式连接到数据库:

using (SQLConnection conn = SQLConnection(@"Data Source=mydbServer;Initial Catalog=mydb;Integrated Security=true;Timeout=180");
{
    conn.Open();
这就成功地连接了

在using{}I集合内:

string query = @"SELECT a.field, a.timestamp " +
               "FROM mydb.dbo.myTable1 a WITH(NOLOCK) " +
               "LEFT JOIN [myOtherdbServer].myOtherdb.dbo.MyTable2 b WITH(NOLOCK) " +
               "ON a.field = b.field " +
               "WHERE b.field is NULL " +
               "AND a.timestamp >= '2015-05-01 00:00:00.000' " +
               "AND a.timestamp < '2015-06-01 00:00.00.000'";
SQLCommand引发超时异常:“操作完成前已过超时时间或服务器未响应”

如果我在运行我的程序的同一系统上使用SQL Server Management Studio,并且作为运行我的程序的同一用户执行相同的SELECT,它将在1秒内完成并返回数千行

现在这种情况一直在发生。几天前它还在工作。我应该找什么?我很困惑,因为同样的选择在SQLServerManagementStudio中起作用。SQL SMS是否使用不同的连接?

“如果我在运行程序的同一系统上使用SQL Server Management Studio,并且作为运行程序的同一用户执行相同的选择,它将在1秒内完成并返回数千行。”

  • 为什么SQLServerManagementStudio中的执行时间更好,可能有几个原因。这一次,结果是,很可能是时间戳列上缺少索引
  • 此外,应用程序服务器是否与sql server位于同一服务器上?否则,这可能会增加延迟并导致超时
  • 链接服务器可能是一个问题,除了延迟考虑之外,我不确定NOLOCK语句是否足以确保您在远程服务器上实现的目标。您很可能需要在远程服务器上创建一个包含NOLOCK语句的视图
  • 现在这种情况一直在发生。几天前它还在工作。我应该找什么?我很困惑,因为同样的选择在SQLServerManagementStudio中起作用。SQL SMS是否使用不同的连接?

    通常情况下,当某个东西正在工作,而现在它已经停止工作,然后某个东西就改变了。开始故障排除,直到找到问题所在,查找索引更改、代码体系结构修改,甚至windows更新,任何可能给您带来线索的内容,直到您能够恢复它

    补充意见,
    尝试将select语句限制在前10位,以查看是否能够返回结果,这可能表明问题在于对象的大小/查询执行时间,与服务器/应用程序配置无关。

    这是因为结果集很大,并且查询花费的时间比默认超时要长,因此超时\n最好使用分页,不要在一次获取所有记录。SQL server Management Studio中的同一查询在1秒内完成。我简直不敢相信,从编程的角度来说,这需要5分钟以上。您是否尝试过创建一个调试点,在那里创建查询。。。然后使用textviewer将该查询复制到SSMS?我注意到您正在连接到联接表上的第二台服务器。如果查询正在等待与其他服务器的连接,这可能会导致问题。您是否可以修改查询以消除与其他服务器的连接,并查看它是否运行得很快。只是一个想法
    using (SQLCommand queryCmd = new SQLCommand(query, conn)
    {
        queryCmd.CommandTimeout = 300;
    
        using (SQLDataReader rdr = queryCmd.ExecuteReader())
        {