2010-07-15 3 views
6

comment passer le paramètre sql comme valeur nulle dans la variable de type de données entier?comment passer le paramètre sql comme valeur nulle dans la variable de type de données integer?

 StockBO sBO = new StockBO(); 
     sBO.Mode = 2; 
     if (ddcmpanyname.SelectedIndex != 0) 
     { 
      sBO.Client_id = Convert.ToInt16(ddcmpanyname.SelectedValue); 
     } 
     else 
     { 
      sBO.Client_id = Convert.ToInt16(DBNull.Value);//Object cannot be cast from DBNull to other types. 
     sBO.Client_id =DBNull.Value;//Cannot implicitly convert type 

     } 
     ds=_StockController.StockGet(sBO); 

i changé le code comme cela, il donne l'erreur comme je mon commentaire vérifier une partie autre

Répondre

19

Essayez ce,

else 
    { 
     sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null; 
    } 
4

Ce n'est pas tout à fait clair ce que vous voulez dire. Si vous essayez de passer une valeur nulle dans un paramètre SQL, vous devez utiliser DBNull.Value comme valeur pour votre SqlParameter (ou quel que soit le type que vous utilisez). Si vous voulez représenter un entier nul en C#, utilisez int? (ou Nullable<int> - ce sont les mêmes choses).

Vous ne pouvez pas stocker une valeur nulle dans une variable de type de valeur normale non nullable. Les types de valeurs nullables sont toujours des structures, mais ils enveloppent le type non nullable et ajoutent une valeur booléenne pour indiquer s'il s'agit d'une valeur "réelle" ou null. C# ajoute du sucre syntaxique autour, vous permettant d'utiliser le null littéral pour des missions, différentes conversions, opérateurs etc levés:

int? value = 5; 
value = null; 
if (value == null) 
{ 
    ... 
} 

Si cela ne fonctionne pas, s'il vous plaît nous donner plus d'informations sur exactement ce que vous essayez faire.

EDIT: Bon, il semble que StockBO.Client_id devrait être de type short? - mais cela ne permettra pas de régler DBNull.Value directement. Vous devez utiliser null pour définir l'ID du client à la valeur null. Chaque fois que vous traduisez entre des objets et des paramètres et des résultats SQL, vous devez effectuer vous-même ce type de conversion. Si vous vous trouvez en train de le faire régulièrement, élaborez des méthodes d'assistance pour vous faciliter la tâche.

Bien sûr, si vous commencez à utiliser LINQ to SQL ou quoi que ce soit de ce genre, vous n'avez pas à vous soucier de DBNull.Value - Les fournisseurs LINQ ont tendance à prendre directement en charge les types de valeurs NULL.

+0

Je suis très fier de voir ..merci ma j'ai mis à jour ma question s'il vous plaît le faire vérifier – TinTin

+0

@ Ayyappan: J'ai édité ma réponse. –

+0

Merci Mr jon skeet – TinTin

1

de SQL à C#>

int number; 
Int32.TryParse(paramvalue, out number); 

de C# SQL>

ajouter DBNull à votre paramètre

1

Essayez DBNull.Value; Comme par exemple:

dbParamId.Value = (object)MyID ?? DBNull.Value; 
0

Compte tenu ParamValue contient le résultat de la requête comme un entier ou un DBNull.Value, je casting à int? ainsi:

var Result = ParamValue as int?; 

Pour déterminer si Le résultat est nul, ne cochez Result.HasValue. Dans le cas contraire, l'utiliser comme un nombre entier d'habitude, ou Result.Value

1

Il est préférable d'attribuer directement DBNull.Value comme:

sBO.Client_id = DBNull.Value

DBNull.Value est pour tout objet

Questions connexes