2010-11-01 11 views
1

J'ai une procédure stockée avec laquelle je remplis gridview dans le programme .net. Le problème est quand je remplis ce paramètre, et l'envoi pour l'exécution à la base de données, je ne reçois rien en retour.sql parameter provoquant des problèmes

Lorsque j'exécute la requête sans ce paramètre, l'application renvoie des données sans problème.

Une idée de ce que peut être le problème?

Certains code:

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

et voici la procédure stockée:

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 

Toute idée pourquoi ce paramètre est à l'origine des erreurs?

Merci à l'avance

+1

Quelle erreur obtenez-vous? –

+0

Je suppose que vous définissez la valeur de chaîne de shippingCountry = ddlCountries.SelectedValue quelque part, non? – Bill

+0

Oui, oui, et le paramètre sql obtient la bonne sélection, s'il y a une valeur dans la liste déroulante, elle sera sélectionnée, sinon la valeur sera la valeur null sql. – Laziale

Répondre

2

Essayez, je le ferais pour toutes vos clauses.

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

Vous pouvez également passer pas un paramètre NULL lorsque que vous avez par défaut votre paramètre à NULL dans SP.

+0

Le problème est quand je veux inclure le paramètre de pays, je n'ai pas de problème lorsque le pays paramètre n'est pas inclus, juste quand est inclus dans les critères – Laziale

+0

Exactement, essayez mon chemin. –

+0

J'ai essayé cela aussi, et je ne reçois toujours pas de données à chaque fois que le pays est sélectionné: S – Laziale

0

Avez-vous essayé d'exécuter le proc en dehors de votre application avec quelques bonnes valeurs param? Retourne-t-il des données lorsque @ShippingCountry n'est pas nul?