【问题标题】:sql parameter causing problemssql参数导致问题
【发布时间】:2010-11-01 20:54:58
【问题描述】:

我有一个存储过程,我用它在 .net 程序中填充 gridview。

问题是当我填充该参数并将执行发送到数据库时,我没有得到任何回报。

当我在没有该参数的情况下执行查询时,应用程序返回数据没有任何问题。

知道可能是什么问题吗?

一些代码:

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

知道为什么该参数会导致错误吗?

提前致谢

【问题讨论】:

  • 我假设您正在某处设置 shippingCountry = ddlCountries.SelectedValue 的字符串值,对吧?
  • 是的,我这样做了,并且 sql 参数得到了正确的选择,如果下拉列表中有一个值,它将被选中,否则该值将是 sql null 值。
  • @Kevin 我没有收到任何错误,当我包含国家/地区参数时,我没有收到任何返回的数据

标签: .net sql parameters


【解决方案1】:

试试这个,我会为你的所有条款都这样做。

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

您也不能在为 NULL 时传递参数,因为您在 SP 中将参数默认为 NULL

【讨论】:

  • 问题是当我想包含国家参数时,不包含国家参数时我没有问题,只是在条件中包含时
  • 我也试过了,但无论何时选择国家,我仍然没有得到任何数据:S
  • 那你肯定有其他问题。如果参数为空,则该子句将被忽略。
【解决方案2】:

您是否尝试过使用一些已知的良好参数值在应用程序之外执行 proc?当@ShippingCountry 不为空时,它是否会返回数据?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多