2010-10-04 119 views
0

我有一個C#服務項目,我連接到SQL並檢索數據。 當我在本地進行調試時,例如:在Visual Studion Developement Server中,它很好用。 但是,當我上傳到服務器(簡單地localhost/MyProject /)SqlCommand()會引發異常。有沒有辦法獲得更多關於SqlCommand()的信息? 我應該設置什麼權限來在服務器上運行Web服務?服務器無法連接到SQL服務器

也許模式的詳細信息: VS2008 envirenoment內的項目是工作良好:

http://localhost:50301/GetJpeg.aspx?ra=224.5941&dec=-1.09&width=1000&height=1000&scale=1

但對http://localhost/GetJpeg.aspx?ra=224.5941&dec=-1.09&width=1000&height=1000&scale=1沒有。

唯一的例外是不是真的異常:

SqlDataReader reader沒有在第二種情況下返回任何結果:

reader = cmdCenter.ExecuteReader(); 
       if (reader.Read()) 
       { 
        //Do Something 

        reader.Close(); 
       }        
       else 
       {     
        throw new Exception("Request is failed"); 

       } 

感謝阿曼。

編輯 只爲信息: 在一種情況下,代碼通過ASP.NET服務器發展論壇調試,第二個是在IIS 7.0上

UPDATE運行

深挖後,我發現:連接是開放和連接,通常的查詢是好的,但存儲功能的查詢失敗...可以是IIS錯過配置?

+1

添加一些異常處理和日誌記錄:log4Net – 2010-10-04 14:30:26

+1

而例外是......?您可以提供更多信息,例如: – Jamiec 2010-10-04 14:30:33

+1

正在拋出異常的堆棧/跟蹤 – 2010-10-04 14:30:36

回答

1

如果您使用SqlCommand控件(拖放到頁面上)而不是SqlCommand對象(代碼),最好的辦法就是添加一個頁級錯誤處理程序(http://msdn.microsoft.com/zh-cn/library/ed577840.aspx)。

最有可能的問題是,您的連接字符串使用SSPI來驗證SQL Server(集成/域安全性)。這將允許您通過Visual Studio進行連接,但不會在部署後進行連接。您可能想看看這篇文章(http://msdn.microsoft.com/en-us/library/bsz5788z.aspx)。那篇文章的答案並不理想,但他們會讓你感動。更好的方法可能會變得非常複雜。一旦你的應用程序重新開始工作,請閱讀這些內容。

+0

感謝把我放到正確的路上。我想知道爲什麼我需要冒充,如果我在web.conf中使用 Arman 2010-10-04 15:36:31

+0

權限問題....感謝 – Arman 2010-10-05 07:23:25

0

您可以將VS中的調試器附加到您的盒子上的IIS並繼續調試。爲此,請轉到Debug-> Attach to Process,然後找到正在運行應用程序池的W3wp.exe進程,您的應用程序正在運行。

+0

調試器被提取,因此我發現reader.Read()在第二種情況下不返回結果... – Arman 2010-10-04 14:43:40

+0

在一個案例中,代碼通過ASP.NET Developement Server進行調試,第二個代碼在ISS 7.0上運行。 – Arman 2010-10-04 14:47:28

+0

您可以調試附加到IIS 7,您只需要知道哪個w3wp.exe進程正在運行您的應用程序。 Cassini是VS調試Web服務器,很方便,但它通常不會複製生產Web服務環境以正確準備和測試應用程序。 – 2010-10-04 14:57:44

0
try 
{ 
    using (SqlConnection connection = new SqlConnection("Your connection string here")) 
    { 
     using (SqlCommand command = new SqlCommand("your sql here", connection)) 
     { 
      connection.Open(); 
      using (SqlDataReader reader = command.ExecuteReader()) 
      { 
      } 
     } 
    } 
} 
catch (Exception exception) 
{ 
    System.Diagnostics.Debug.WriteLine(exception); 
} 

catch中的斷點以在調試器中查看異常。

+0

感謝您的片段。如何檢查讀者是否可以? – Arman 2010-10-04 15:24:19

+0

我正在檢查連接狀態是「打開」。所以用戶可以連接到數據庫,但查詢仍然是空的。 – Arman 2010-10-04 15:40:34

+0

您可以檢查'reader.HasRows',或者在讀取多個行時使用'reader.Read()'來獲取每一行。如果調用'.ExecuteReader'有問題,則拋出'SqlException'或'InvalidOperationException'。 – JLWarlow 2010-10-05 09:01:43