1

我有一個簡單的Windows服務,並在此服務內我試圖連接到一個SQL服務器在一個計時器塊(我試圖做只有一次onStart方法 - >相同結果)。Sql連接不打開在Windows服務

就目前而言,我只是試圖執行一個選擇,使用下面的代碼:

using (SqlConnection sc = new SqlConnection()) 
     { 
       var sqlConnection = new SqlConnection(_sqlConnectionString); 
       string commanda = "SELECT Moneda, SimbolMoneda FROM NomMoneda WHERE         Moneda != '' AND SimbolMoneda != ''"; 
       SqlCommand command = new SqlCommand(commanda, sqlConnection); 
       command.CommandType = System.Data.CommandType.Text; 
       IDataReader reader; 
       sc.ConnectionString = _sqlConnectionString; 
       sc.Open(); 
       reader = command.ExecuteReader(CommandBehavior.CloseConnection); 

      } 

我重視服務調試,我注意到,它並沒有被這行代碼通過sc.Open()

該服務與sql服務器不在同一臺計算機上,但我試圖將其安裝在不同的用戶下,LocalSystem,NetworkService,與sql服務器位於同一域中的用戶,但沒有任何結果。

任何幫助,將不勝感激。

+1

向我們顯示您的連接字符串 – DGibbs

+0

是使用sspi/trusted的連接字符串嗎?或SQL Server身份驗證?在sspi/trusted的情況下:該服務的帳戶是否可以訪問該sql服務器/數據庫?另外 - 請參閱sql server的事件日誌:http://colinmackay.co.uk/2013/07/26/tip-of-the-day-how-to-tell-why-your-app-couldnt-log-on -to-sql-server/ –

回答

0

問題很簡單,但很難察覺。我的連接字符串未加前綴@ char:

ex: _connectionString = @"Data Source =......."; 
4

看起來您可能在此代碼中存在邏輯錯誤。您正在使用sc作爲SqlConnection,但是當您創建命令對象時,您使用的是從未實際打開的sqlConnection

這條線的問題是:

SqlCommand command = new SqlCommand(commanda, sqlConnection); 

嘗試以下操作來代替:

SqlCommand command = new SqlCommand(commanda, sc); 

編輯在10:22以下用戶評論

只是爲了確認您已做如所示的變化,我重新調整了你的代碼。你可以嘗試以下方法:

using (SqlConnection sc = new SqlConnection()) 
{ 
    sc.ConnectionString = _sqlConnectionString; 
    sc.Open(); 

    string commanda = "SELECT Moneda, SimbolMoneda FROM NomMoneda WHERE Moneda != '' AND SimbolMoneda != ''"; 
    SqlCommand command = new SqlCommand(commanda, sc); 
    command.CommandType = System.Data.CommandType.Text; 

    IDataReader reader; 
    reader = command.ExecuteReader(); 
} 
+0

那裏好眼睛 –

+0

我做了更改但沒有運氣。我在lightswitch和wcf ria應用程序中使用這個代碼,它工作正常,但不知道哪裏可能是問題,也許是一個安全問題,並且sql server不允許訪問,我必須做更多研究。不管怎麼說,還是要謝謝你。 –

0

我希望,無論問題是它會更容易弄清楚,如果你有在地方的日誌機制來捕捉和記錄未處理的異常。由於Windows服務沒有用戶界面,因此您應該從頭開始實施日誌記錄。否則,你會發現服務意外終止,你從系統日誌中收集的少量信息將不足以幫助你。

總之,添加文件日誌記錄,你可能會立即找出問題。

+0

謝謝你的回覆,事實上,文件日誌記錄將會很有用。這似乎是一個連接問題,也許我沒有正確的權利,我不得不做更多的研究。該代碼可以從wcf ria或lightswitch應用程序正常工作,但是從Windows服務或控制檯應用程序不會打開連接。 –