2013-08-26 2 views
-1

Я разработал страницу поиска, содержащую элемент управления текстовым полем для ввода номера и кнопки для отображения соответствующих результатов в 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 

... Может кто-то пожалуйста, то или иное направление?

+0

'Shipment_Po.PONumber = @ PON' – bummi

ответ

0

Проблема заключается в сохраненной процедуре. Выражение:

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

Не делает то, что вы думаете. Он делает следующее сравнение:

  WHERE Shipment_Po.PONumber = '[email protected]+' 

Или что-то в этом роде. Другими словами, вы смешиваете динамические выражения SQL с обычным SQL. Попробуйте сделать:

  WHERE Shipment_Po.PONumber = @PON 

Если вы обеспокоены тем, приведение к правильному типу:

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

Оба предложения работали, спасибо! – user1724708

Смежные вопросы