2010-10-04 121 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