查询在SQL Server中成功执行但在.NET中不成功

问题描述:

我写了一个查询,它在.NET应用程序和SQL Server中都能正常工作。查询在SQL Server中成功执行但在.NET中不成功

但是,当我用广泛的参数进行测试时,我发现对于那个特殊情况,它没有在.NET应用程序中显示任何内容,但在SQL Server中显示结果。

我试过谷歌,没有结果有点奇怪。所以,我在这里问。

这是我的查询:

SELECT DISTINCT 
     tblCustomers.customerID AS Customer#, 
     tblCustomers.firstName + ' ' + tblCustomers.surname AS Name, 
     tblCustomers.street AS Street, 
     tblCustomers.suburb AS Suburb, 
     tblCustomers.postCode AS Postcode, 
     tblCustomers.state AS State, 
     tblCustomers.country AS Country, 
     tblCustomers.phone AS [Phone No.], 
     tblCustomers.fax AS Fax, 
     tblCustomers.mobilePhone AS [Mobile Phone], 
     tblCustomers.email AS [E-mail] 
    FROM  
     tblCustomers 
    INNER JOIN 
     tblProduct_Backorder ON tblCustomers.customerID = tblProduct_Backorder.customerId 
    WHERE  
     (tblCustomers.customerID IN 
       (SELECT  
        customerId 
       FROM   
        tblProduct_Backorder AS tblProduct_Backorder_1 
       WHERE  
        (productId IN 
          (SELECT  
           productID 
          FROM 
           tblProducts 
          WHERE  
           (skuCode = 76761) 
        ) 
       ) 
      ) 
     ) 

这查询不工作skuCode = 76761,但这一工作在SQL Server中的罚款。

谢谢。

+2

我们这里没有足够的信息来真正回答。你是否连接到不同的数据库?你真的执行了查询吗?你使用什么代码? Blah blah – 2013-02-12 02:09:49

+0

好的,我为此道歉。我只是将我的Gridview与SQL数据源连接起来,并且我提到了参数化查询本身。所以,我没有写任何代码来连接数据库。 – 2013-02-12 02:20:33

+1

您的ASP.net代码不正确或连接字符串错误。巧合的是,你没有向我们展示过这些东西。 – RBarryYoung 2013-02-12 03:30:43

你真的没有足够的信息给我们,甚至开始猜测导致问题的原因。在平均时间试试这个,而不是你的查询:

SELECT c.customerID AS [Customer#], 
     c.firstName + ' ' + tblCustomers.surname AS Name, 
     c.street AS Street, 
     c.suburb AS Suburb, 
     c.postCode AS Postcode, 
     c.state AS State, 
     c.country AS Country, 
     c.phone AS [Phone No.], 
     c.fax AS Fax, 
     c.mobilePhone AS [Mobile Phone], 
     c.email AS [E-mail] 
FROM dbo.tblCustomers c 
WHERE EXISTS (SELECT 1 
       FROM dbo.tblProduct_Backorder b 
       JOIN dbo.tblProduct p 
         ON b.productId = p.productId 
       WHERE p.skuCode = 76761 
         AND b.customerId = c.customerId);        

如果我正确理解你的表的关系,它会同时做少了很多的工作产生相同的结果。

对于你原来的问题,你也应该发布.net代码。另外,“没有结果”是什么意思?一个空的结果?超时?一个错误?

+0

我尽可能提供信息。我会尝试这个查询。谢谢你的帮助。 – 2013-02-12 02:38:04

+0

我试过这个,并给出相同的结果。你能告诉我这个查询是如何工作的吗?现在,我将尝试使用.net应用程序。 – 2013-02-12 02:40:27

+0

我在asp.net的查询生成器中试过了你的查询,并发现了一些奇怪的行为。当我替换直接值(比如说skuCode = 76761)时,它对两个查询都正常工作,但是在使用参数(例如skuCode = @s和@ s = 76761)尝试时,那么您的查询将返回带NULL值的结果,而我的查询返回无结果。 – 2013-02-12 02:55:12

我在xQbert的评论帮助下找到了解决方案。我花了很多时间,并且看到了SQL Profiler中如何执行查询。表tblProduts中的skuCode是nvarchar(6),表tblProduct_BackOrder是其整数。所以,我使用Convert()函数将其转换为相同参数的Integer。