параметр sql вызывает проблемы - PullRequest
1 голос
/ 01 ноября 2010

У меня есть хранимая процедура, с помощью которой я заполняю gridview в программе .net.

Проблема в том, что когда я заполняю этот параметр и отправляю на выполнение в базу данных, я ничего не получаю взамен.

Когда я выполняю запрос без этого параметра, приложение возвращает данные без проблем.

Есть идеи, в чем может быть проблема?

Некоторые коды:

if (ddlCountries.SelectedIndex > 0)
{
   commAdvanced.Parameters.Add("@ShippingCountry", SqlDbType.NVarChar).Value = shippingCountry;
}
else
{
   commAdvanced.Parameters.Add("@ShippingCountry", SqlDbType.NVarChar).Value = DBNull.Value;
}

и вот хранимая процедура:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE Dbo_SearchAll
(
    @StartTime datetime = null,
    @EndTime datetime = null,
    @CustomerEmail nvarchar(255) = null,
    @OrderStatusID nvarchar = null,
    @PaymentStatusID nvarchar = null,
    @Username nvarchar(255) = null,
    @CustomerName nvarchar(255) = null, 
    @OrderNumber int = null,
    @MinimumOrderAmount decimal = null, 
    @MaximumOrderAmount decimal = null,
    @ShippingMethod nvarchar = null,
    @SKU nvarchar(255) = null,
    @CouponID int = null,
    @DiscountType int = null,
    @ShippingCountry nvarchar = null
)
AS BEGIN
    SET NOCOUNT ON

    SELECT DISTINCT 
         o.OrderID, o.OrderTotal, o.ShippingCountry, 
         n.Name AS OrderStatus, 
         p.Name AS PaymentStatus 
    FROM 
         Order o
    JOIN 
         OrderStatus n ON o.OrderStatusID = n.OrderStatusID
    JOIN 
         PaymentStatus p ON o.OrderStatusID = p.PaymentStatusID 
    JOIN 
         Customer c ON o.CustomerID = c.CustomerID
    JOIN 
         OrderVariationsPeople op ON o.OrderID = op.OrderID
    JOIN 
         VariousPeople pv ON op.ProductID = pv.ProductId
    WHERE
         (o.CreatedOn > @StartTime OR @StartTime IS NULL)
         AND (o.CreatedOn < @EndTime OR @EndTime IS NULL)
         AND (o.ShippingEmail = @CustomerEmail OR @CustomerEmail IS NULL)
         AND (o.OrderStatusID IN (@OrderStatusID) OR @OrderStatusID IS NULL)
         AND (o.PaymentStatusID IN (@PaymentStatusID) OR @PaymentStatusID IS NULL)
         AND (c.Username = @Username OR @Username IS NULL)
         AND (o.BillingFirstName + ' ' + o.BillingLastName = @CustomerName OR @CustomerName IS NULL)
         AND (o.ShippingFirstName + ' ' + o.ShippingLastName = @CustomerName OR @CustomerName IS NULL)
         AND (o.OrderID = @OrderNumber OR @OrderNumber IS NULL)
         AND (o.OrderTotal > @MinimumOrderAmount or @MinimumOrderAmount IS NULL)
         AND (o.OrderTotal < @MaximumOrderAmount OR @MaximumOrderAmount IS NULL)
         AND (o.ShippingMethod = @ShippingMethod OR @ShippingMethod IS NULL)
         AND (pv.SKU = @SKU OR @SKU IS NULL)
         AND (o.DiscountID = @DiscountType OR @DiscountType IS NULL)
         AND (o.ShippingCountry = @ShippingCountry OR @ShippingCountry IS NULL)
    ORDER BY 
         o.OrderID
END

Есть идеи, почему этот параметр вызывает ошибки?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 01 ноября 2010

Попробуйте, я бы сделал это для всех ваших предложений.

@ShippingCountry IS NOT NULL AND o.ShippingCountry = @ShippingCountry

Вы также можете не передавать параметр, когда он равен NULL, поскольку вы по умолчанию используете для этого параметра значение NULL в SP.

0 голосов
/ 02 ноября 2010

Вы пытались выполнить proc вне вашего приложения с некоторыми известными хорошими значениями параметров?Возвращает ли он когда-либо данные, когда @ShippingCountry не равен нулю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...