2010-07-15 10 views
6

cómo pasar el parámetro sql como valor nulo en una variable de tipo de datos entero?cómo pasar el parámetro sql como valor nulo en la variable de tipo de datos entero?

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

he cambiado el código como el que da error como i mi comentario cheque otra parte

Respuesta

19

probar esto,

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

No está del todo claro a qué se refiere. Si usted está tratando de pasar un valor nulo en un parámetro de SQL, debe utilizar DBNull.Value como el valor para su SqlParameter (o lo que sea el tipo que está utilizando). Si desea representar un entero que puede contener nulos en C#, use int? (o Nullable<int> - son lo mismo).

No puede almacenar un valor nulo en una variable de tipo de valor no anulable normal. tipos de valores con valores nulos son todavía estructuras, sino que envuelven el tipo no anulable y añaden un valor booleano para indicar si se trata de un valor "real" o nula. C# agrega el azúcar sintáctica alrededor de él, lo que le permite utilizar la null literal para las asignaciones, varias conversiones, operadores, etc. levantadas:

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

Si eso no ayuda, por favor nos da más información sobre exactamente lo que estamos tratando que hacer.

EDITAR: Bien, entonces parece que StockBO.Client_id debería ser del tipo short? - pero eso no permitirá que DBNull.Value se establezca directamente. Debe usar null para establecer la ID del cliente en el valor nulo. Cada vez que se traduce entre los objetos y los parámetros de SQL y los resultados, que necesita para llevar a cabo ese tipo de conversión usted mismo - si usted se encuentra haciendo esto de forma regular, se resuelve algunos métodos de ayuda para que sea más fácil para usted.

Por supuesto, si usted comienza a usar LINQ a SQL ni nada de eso, usted no tiene que preocuparse acerca de DBNull.Value - LINQ proveedores tienden a apoyar directamente los tipos de valor anulables.

+0

Estoy muy orgulloso de ver la publicación ..gracias ma he actualizado mi pregunta, por favor, compruebalo – TinTin

+0

@Ayyappan: he editado mi respuesta. –

+0

Gracias señor jon skeet – TinTin

1

de SQL para C#>

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

de C# para SQL>

añadir DBNull a su parámetro

1

Trate DBNull.Value; Como por ejemplo:

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

Considerando ParamValue contiene el resultado de la consulta como un entero o una DBNull.Value, estoy echando a int? esta manera:

var Result = ParamValue as int?; 

Para determinar si El resultado es nulo, se echa un Result.HasValue. De lo contrario, lo utilizan como un número entero de costumbre, o Result.Value

1

Es mejor asignar directamente DBNull.Value como:

sBO.Client_id = DBNull.Value

DBNull.Value es para todos los objetos

Cuestiones relacionadas