我正在編寫一個從啓動文件夾運行的應用程序,並嘗試連接到本地SQLServer2008-r2數據庫,作爲應用程序啓動過程的一部分。我連接到數據庫設置爲使用Windows身份驗證,並在應用我的連接字符串是標準的舊的連接字符串: Data Source=localhost\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=True
啓動程序連接到本地數據庫時存在間歇性問題
實際建立連接的代碼如下所示:
String connectionstring = "Data Source=localhost\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=True";
SqlConnection cn = new SqlConnection(connectionstring);
bool databaseUp = false;
void Start()
{
CheckSQLService();
for (int i = 0; i < 600; i++)
{
if (ConnectToDB())
{
Console.WriteLine("Database is up and running.");
databaseUp = true;
}
else
{
Console.WriteLine("Database Connection Failed");
CheckSQLService();
Console.WriteLine("Trying again");
Thread.Sleep(1000);
}
}
if(!databaseUp)
{
Console.WriteLine("Database Not Connected: exited loop.");
}
}
bool ConnectToDB()
{
try
{
cn.Open();
return true;
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
return false;
}
}
void CheckSQLService()
{
System.ServiceProcess.ServiceController SC = new System.ServiceProcess.ServiceController("MSSQL$SQLEXPRESS");
Console.WriteLine(" = = = Checking SQL Service Status: = = = "
+ "\n ServiceName : " + SC.ServiceName
+ "\n State : " + SC.Status
+ "\n Stoppable : " + SC.CanStop
+ "\n Pausable : " + SC.CanPauseAndContinue
+ "\n Can Shutdown: " + SC.CanShutdown);
}
基本上我循環,直到我得到一個連接,如果失敗,我睡覺,再試一次。
大部分時間(大約60%)我能夠在第一次嘗試時成功建立連接而沒有問題。有時候,這需要多次嘗試才能成功,並且應用程序會等待一段時間。我還會注意到,讀取CheckSQLService()會在我每次調用SQL服務時都進行驗證 - 只是有時會顯然拒絕我的Windows憑據。
有人有想法,爲什麼這可能會間歇性地發生?再次,這是Windows首次啓動時運行的應用程序的一部分,因此可能會有許多因素在起作用(例如其他進程或服務未完全加載,或者在同一時間開始等)。
[您是否在數據庫中設置了AutoClose選項](http://blogs.msdn.com/b/buckwoody/archive/2009/06/24/sql-server-best-practices-autoclose-should-待off.aspx)? – 2014-09-25 00:48:05