存储过程返回零结果

时间:2013-08-26 01:01:26

标签: asp.net sql-server stored-procedures

我开发了一个搜索页面,其中包含用于输入数字的文本框控件和用于在Gridview中显示相应结果的按钮。该页面用于存储过程。当我手动输入数字时,sql查询返回通过SQL Server管理器运行时的预期结果,但在我的存储过程中使用时,我得到零结果。

这是按钮事件处理程序背后的代码:

Dim ds As New DataSet()

        Using connection As New SqlConnection(ConfigurationManager.ConnectionStrings("ShipperNotificationConnectionString1").ToString())
            Using command As New SqlCommand()
                command.CommandType = CommandType.StoredProcedure
                command.CommandText = "getPON"
                command.Connection = connection

                command.Parameters.AddWithValue("@PON", txtPON.Text)

                connection.Open()
                Dim a As New SqlDataAdapter(command)
                a.Fill(ds)
            End Using
        End Using

        gvPON.DataSource = ds
        gvPON.DataBind()

...以下是存储过程:

ALTER PROCEDURE [dbo].[getPON]
(
    @PON varchar
)
AS
BEGIN
  SELECT     SupplierCompany.company_name, SupplierCompany.Address1, SupplierCompany.Address2, SupplierCompany.City, SupplierCompany.State, 
                      SupplierCompany.Zip, Shipment_Po.PONumber, Shipment.TotalWeight, Shipment.NoOfPallets, Shipment.PalletIdentical
FROM         SupplierCompany INNER JOIN
                      Shipment ON SupplierCompany.Company_guid = Shipment.Company_Guid INNER JOIN
                      Shipment_Po ON Shipment.Shipment_Guid = Shipment_Po.Shipment_guid
             WHERE Shipment_Po.PONumber = '''+ @PON +'''
END 

......有人可以提供一些方向吗?

1 个答案:

答案 0 :(得分:1)

问题是存储过程。表达式:

         WHERE Shipment_Po.PONumber = '''+ @PON +'''

没有做你的想法。它正在进行以下比较:

         WHERE Shipment_Po.PONumber = '+@PON+'

或类似的东西。换句话说,您将动态SQL表达式与常规SQL混合使用。尝试做:

         WHERE Shipment_Po.PONumber = @PON

如果您担心演员阵容为正确类型:

         WHERE Shipment_Po.PONumber = (case when isnumeric(@PON) = 1 then cast(@PON as int) end)