2009-04-17 102 views
0

我們對數據訪問層(C#)和數據庫(MS SQL)之間的交互進行了一些自動化測試。我們正在使用SQL Express來安裝一個mdf,在測試完成後我們將恢復它。這似乎是第一次在新引導的機器上運行測試,即使SQLExpress正在運行,我們也會看到超時。第二次,他們運行得很好。如何通過測試讓我的SQL Server Express連接第一次超時?

查詢字符串例如:

Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\TEST_DATA.mdf; Integrated Security=True; User Instance=True 

實例錯誤:

[nunit2] 1) Test : System.Data.SqlClient.SqlException : Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 
    [nunit2] at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
    [nunit2] at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 
    [nunit2] at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) 
    [nunit2] at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) 
    [nunit2] at System.Data.SqlClient.TdsParserStateObject.ReadPacket(Int32 bytesExpected) 
    [nunit2] at System.Data.SqlClient.TdsParserStateObject.ReadBuffer() 
    [nunit2] at System.Data.SqlClient.TdsParserStateObject.ReadByte() 
    [nunit2] at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 
    [nunit2] at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) 
    [nunit2] at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) 
    [nunit2] at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) 
    [nunit2] at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) 
    [nunit2] at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 
    [nunit2] at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 
    [nunit2] at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 
    [nunit2] at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 
    [nunit2] at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 
    [nunit2] at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
    [nunit2] at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    [nunit2] at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    [nunit2] at System.Data.SqlClient.SqlConnection.Open() 
    [nunit2] at Test() 

有沒有人遇到過這個?你找到了解決辦法嗎?

+0

您如何確認SQL Server已啓動並正在運行?您是否正在檢查SQL Server錯誤日誌文件以確保所有啓動操作都已完成? – 2009-04-17 19:02:08

回答

0

它看起來像這個問題沒有什麼太大的比增加其他的解決方案的連接超時或僅僅重試。這只是服務器在全新系統上啓動數據庫的成本。在我的測試中,它在重新啓動後發生,但停止並啓動SQL服務不會導致問題。 This thread on EE提出了類似的問題。

1

也許數據庫在第一次點擊或自動關閉時仍然恢復,並且第一次打開時必須由引擎打開。檢查以下改變MSDB此設置的執行力,爲你的數據庫名,如果返回1,那麼你已經將它設置爲自動關閉

SELECT DATABASEPROPERTYEX('msdb' , 'IsAutoClose') 
+0

我會在哪裏運行該命令?數據庫附加在本地 - 在連接打開之前它不存在於SQLExpress上,並且在連接關閉時分離。 – 2009-04-17 18:07:50

相關問題