2010-07-15 11 views
6

Wie sql-Parameter als Nullwert in Integer-Datentyp-Variable übergeben?Wie sql Parameter als Nullwert in Integer-Datentyp-Variable übergeben?

 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); 

änderte ich den Code wie folgt es Fehler, wie ich meinen Kommentar Check anderer Teil Es ist

Antwort

19

die Sie interessieren,

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

gibt nicht ganz klar, was Sie meinen. Wenn Sie versuchen, einen Nullwert in einem SQL-Parameter zu übergeben, sollten Sie DBNull.Value als Wert für Ihre SqlParameter (oder den von Ihnen verwendeten Typ) verwenden. Wenn Sie eine nullbare ganze Zahl in C# darstellen möchten, verwenden Sie int? (oder Nullable<int> - sie sind das Gleiche).

Sie können keinen Nullwert in einer normalen, nicht nullbaren Werttypvariablen speichern. Nullable-Werttypen sind immer noch Strukturen, aber sie umbrechen den Nicht-Nullable-Typ und fügen einen booleschen Wert hinzu, um anzugeben, ob es sich um einen "echten" Wert oder Null handelt. C# fügt syntaktischen Zucker um ihn herum, so dass Sie die null wörtlichen für Zuweisungen verwenden, verschiedene Umwandlungen, hoben Betreiber etc:

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

Wenn das nicht hilft, bitte geben Sie uns weitere Informationen über genau das, was Sie versuchen, machen.

EDIT: Okay, so dass es wie StockBO.Client_id sieht short? vom Typ sein sollte - aber dann, dass nicht zulassen DBNull.Value direkt eingestellt werden. Sie sollten null verwenden, um die Client-ID auf den Nullwert festzulegen. Wenn Sie zwischen Objekten und SQL-Parametern und -Ergebnissen übersetzen, müssen Sie diese Art der Konvertierung selbst durchführen. Wenn Sie dies regelmäßig tun, erarbeiten Sie einige Hilfsmethoden, um es Ihnen leichter zu machen.

Natürlich, wenn Sie anfangen, LINQ to SQL oder etwas ähnliches zu verwenden, müssen Sie sich keine Gedanken über DBNull.Value machen - LINQ-Anbieter neigen dazu, Nullable-Werttypen direkt zu unterstützen.

+0

Ich bin sehr stolz, Post zu sehen ..Danke ma ich habe meine Frage aktualisiert bitte überprüfen Sie es – TinTin

+0

@Ayyappan: Ich habe meine Antwort bearbeitet. –

+0

Vielen Dank Mr Jon Skeet – TinTin

1

von SQL in C#>

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

von C# SQL>

hinzufügen DBNull zu Ihrem Parameter

1

DBNull.Value Versuchen; Wie zum Beispiel:

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

Anbetracht ParamValue das Ergebnis der Abfrage als eine ganze Zahl enthält oder ein DBNull.Value, ich bin es zu int Casting? auf diese Weise:

var Result = ParamValue as int?; 

Um zu bestimmen, ob Ergebnis null ist, nicht Result.HasValue überprüfen. Ansonsten ist es wie eine gewöhnliche ganze Zahl verwenden oder Result.Value

1

Es ist besser, direkt DBNull.Value wie zuweisen:

sBO.Client_id = DBNull.Value

DBNull.Value ist für alle Objekte

Verwandte Themen