2016-03-07 108 views
1

我用C#.NET編寫的應用程序有一個非常奇怪的SQL連接超時情況。C#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); 
}    

這是發生在測試服務器上,這意味着當應用程序正在執行這些腳本時,服務器上沒有其他事情發生。

+4

我們需要看到您的相關C#代碼和SQL查詢。 –

+0

試一下'cmdSQL.CommandTimeout = 0;' – Sachu

+0

你同意sql腳本很簡單吧?我只是不明白爲什麼這一個腳本是超時的,其餘的不是。要注意的是,Test sql服務器上沒有其他任何運行,iTimeOut值爲30秒。 – Andy

回答

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> 

如果abo已經無法正常工作,您可以通過代碼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

+0

我已經提出了超時,直到1分鐘,沒有幫助。在我看來,設定更高的價值並不好。我試圖找出發生這種情況的原因 – Andy

+0

我相信默認值是10分鐘?所以不知道爲什麼你認爲超過1分鐘是不好的。然而讓我們看看導致它的腳本的代碼,也許我們可以看到發生了什麼? – JanR

+0

更新了我的答案。 – JanR

0

就停止運行,並再次運行您的問題將得到解決....這通常只會在第一次出現大量文件時加載,這可能是Visual Studio中的錯誤。 新: 停止嘗試刷新打開的網頁(在瀏覽器中顯示錯誤),而不是重新啓動它...

+0

我已經做了好幾次了,這些問題發生在應用程序的每次重新啓動時。 – Andy