2012-01-06 40 views
9

estoy usando una declaración preparada en C#.Usando SqlDBType.Decimal en la declaración preparada C#

SqlCommand inscommand = new SqlCommand(supInsert, connection); 
inscommand.Parameters.Add("@ordQty", SqlDbType.Decimal,18); 
inscommand.Prepare(); 
u = inscommand.ExecuteNonQuery(); 

El código anterior tiros debajo Excepción:

método SqlCommand.Prepare requiere parámetros de tipo 'decimal' tienen un conjunto explícitamente precisión y escala.

EDIT: ¿Cómo evitar esta excepción

+0

¿Tiene alguna pregunta? ¿Qué no encuentras claro sobre el error? – Oded

+0

Hola, Sí, estoy obteniendo la excepción anterior para establecer la precisión y la escala. –

+0

Y? Lo que no está claro sobre el error? Debe establecer la precisión y la escala. – Oded

Respuesta

28

La siguiente fijaría un decimal con la precisión 18 y la Escala 8 (decimal (18,8))

SqlCommand insertCommand= new SqlCommand(supInsert, connection); 
insertCommand.Parameters.Add("@ordQty", SqlDbType.Decimal,18); 

insertCommand.Parameters["@ordQty"].Precision = 18; 
insertCommand.Parameters["@ordQty"].Scale = 8; 

insertCommand.Prepare(); 
u = insertCommand.ExecuteNonQuery(); 
3

Tendrá que definir explícitamente precisión y escalar para este parámetro.

SqlParameter ordQty = cmd.Parameters.Add("@ordQty", SqlDbType.Decimal); 
ordQty.Precision = x; //Replace x with what you expect in Sql Sp 
ordQty.Scale = y; //Replace y with what you expect in Sql Sp 
ordQty.Value = 18; //Set value here 
inscommand.Parameters.Add(ordQty); 
4

intente esto:

SqlParameter parameter = new SqlParameter("@ordQty", SqlDbType.Decimal); 
parameter.Precision = 18; 
parameter.Scale = 0; 
parameter.Value = YOURVALUEHERE; 
inscommand.Parameters.Add(parameter); 
6

Como excepción señaló, hay que establecer explícitamente los SqlParameter.Precision y SqlParameter.Scale propiedades con el fin de utilizar el tipo de decimal como parámetro.

Digamos que su campo SQL es del tipo decimal(18,8). La manera de hacer esto en línea es el uso de ortesis-inicialización para su SqlParameter al tiempo que añade a la SqlParameterCollection, de la siguiente manera:

cmd.Parameters.Add(new SqlParameter("@ordGty", SqlDbType.Decimal) { 
    Precision = 18, Scale = 8 }); 

También se puede hacer

cmd.Parameters.Add(new SqlParameter("@ordGty", SqlDbType.Decimal) { 
    Precision = 18, Scale = 8}).Value = 0.4m; // or whatever 

para agregar el valor, si necesito uno. Incluso podría hacer

cmd.Parameters.Add(new SqlParameter("@ordGty", SqlDbType.Decimal) { 
    Precision = 18, Scale = 8, Value = 0.4m /* or whatever */}); 

si lo prefiere. Brace initialization es realmente poderoso.

Nota al margen: me doy cuenta de que esta es una vieja pregunta, pero creo que esta forma es mucho más legible que crear el objeto al agregarlo a la lista y establecer la escala y la precisión. Para la posteridad! (ya que este es un resultado de búsqueda de Google de alta clasificación)

Cuestiones relacionadas