2010-02-11 3 views
0

L'utilisation de Subsonic 3.0.0.3 permet-elle de transmettre une valeur nulle à un paramètre de procédure stockée? Si oui, quelle est la manière appropriée?Subsonic 3 - Passer une valeur nulle à un paramètre de procédure stockée

Détails
Dire que j'ai un sp où l'un des paramètres a une valeur par défaut comme:

CREATE Procedure Test_SPWithNullParams(@p1 int=null, @p2 varchar(50)) 
    AS 
    SELECT 1 as Stuff 

Puis dans mon code, je veux faire quelque chose comme:

var db = new Sandbox.DB(); 
StoredProcedure sproc = db.Test_SPWithNullParams(null , "test"); 
//alternately --> db.Test_SPWithNullParams("test"); 

La façon dont la fonction correspondante a été générée dans StoredProcedures.cs, cependant, le paramètre pour @ p1 n'est pas Nullable. Alors, quelles sont mes alternatives? Je suis tombé sur cet article (http://brianmrush.wordpress.com/2010/01/19/subsonic-t4-templates-stored-procedures-nullable-parameters), mais il semble que ce soit un travail fastidieux qui corrige efficacement la base du code. J'ai également pensé à redéfinir manuellement l'objet de commande. Quelque chose comme:

int dummyInt = -1; 
StoredProcedure sproc = db.Test_SPWithNullParams(dummyInt , "test"); 
sproc.Command.Parameters[0].ParameterValue = DBNull.Value; 

Pensées?

Répondre

0

Je n'ai pas Subsonic sous la main, mais peut-être que vous pourriez utiliser int null.

int? dummyInt = null; 
StoredProcedure sproc = db.Test_SPWithNullParams(dummyInt , "test"); 
+0

Désolé, mais la définition de null dummyInt param empêche la compilation. Subsonic écrit "db.Test_SPWithNullParams" sans paramètre nullable. Cela signifie que je dois soit faire un (int.hasvalue? Int: 0) ou définir un paramètre non nullable. Ni permettez-moi de passer une valeur nulle à mon SP. – EBarr

0

Aucun moyen. Les procédures stockées sont générées uniquement sans types nullables. Pourquoi ne pas essayer quelque chose comme ça ?:

StoredProcedure sproc = db.Test_SPWithNullParams(someNullableInt.HasValue ? someNullableInt.Value: 0, "test"); 
+0

Je comprends que Subsonic génère des paramètres de fonction non nullable. Mon modèle de données, cependant, nécessite des valeurs nulles dans certaines situations. La suggestion ci-dessus envoie une valeur non nulle ou un zéro plutôt que la valeur nulle dont j'ai besoin. – EBarr

+0

Désolé, j'ai oublié de demander .. ce qui en fait un "non-sens"? Mon modèle de données nécessite des valeurs NULL. – EBarr

+0

Vous devez modifier le modèle Subsonic StoredProcedures.tt et voir si le cœur Subsonic identifie lorsqu'une procédure a un paramètre nul. Sinon, vous devez réellement branchez Subsonic. – Apocatastasis

Questions connexes