2011-05-18 27 views
5

Estoy tratando de obtener el valor Score_Waarde de mi base de datos utilizando el siguiente código:conversión especificada no es válida

critid = critid_arr[teller2].ToString(); 

int scorehulp = 0; 
string userid = Session["userid"].ToString(); 

SqlCommand cmd3 = new SqlCommand("SELECT Score_Waarde FROM Score WHERE Crit_ID = '" + critid + "' AND User_ID = '" + userid + "' ", con); 
scorehulp = (int)cmd3.ExecuteScalar(); 

Cuando trato de ejecutar este me sale el siguiente error: La conversión especificada no es válida. No entiendo por qué obtengo este error porque critid y userid están dando los valores correctos.

+4

Con el depurador asociado, ¿qué valor * * se volvió? Si no es de tipo 'System.Int32' entonces que va a morir horriblemente. (por ejemplo, si se devuelve un' long' o 'byte' no funcionaría.) Mejor wa y para encontrar/corregir es para verificar las suposiciones; y el uso de un depurador aquí omitirá 20 pasos :-) –

+0

Puede probar [Int32.Parse] (http://msdn.microsoft.com/en-us/library/b3h1hf19.aspx) en la representación de cadenas del valor de retorno . Pero ten cuidado con los valores 'Null'. 'Int32.Parse (cmd3.ExecuteScalar(). ToString())' –

+1

Debe verificar que el valor devuelto no sea 'DBNull'. –

Respuesta

11

Su SQL probablemente está devolviendo un tipo numérico diferente, como long o decimal, o, aparentemente, string.

Llame Convert.ToInt32, que no tiene el limitations of an unboxing cast.

0

me estaba originalmente este error (mi código C#

someobject.TotalItemCount = (Int32)dbManager.GetParameterValue("TotalRows")) 

donde TotalItemCount era de int tipo, a pesar de que el SP estaba bien & estaba dando resultado adecuado. Me deshice de esto sólo mediante la fijación del SP añadiendo el siguiente código

Set @TotalRows = @@rowcount. 
Cuestiones relacionadas