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

时间:2013-02-12 02:07:02

标签: asp.net sql-server

我写了一个在.NET应用程序和SQL Server中都运行良好的查询。

但是,当我使用宽参数进行测试时,我发现对于那个特定的,它没有在.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 个答案:

答案 0 :(得分:1)

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

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代码。另外,“没有结果”是什么意思?空结果?超时?错误?

答案 1 :(得分:0)

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

相关问题