指定转换无效

6

我正在尝试使用以下代码从我的数据库中获取Score_Waarde值:

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

当我尝试运行此代码时,会出现以下错误:指定的转换无效。 我不明白为什么会出现这个错误,因为critiduserid分别已经传递了正确的值。

4
如果附加了调试器,返回的是什么值?如果它不是 System.Int32 类型,那么程序将出现致命错误。(例如,如果它返回 longbyte,程序将无法正常工作。)最好的方法是验证并修复假设,使用调试器可以跳过20个步骤 :-) - user166390
你可以尝试在返回值的字符串表示上使用Int32.Parse,但对Null值要小心。Int32.Parse(cmd3.ExecuteScalar().ToString()) - Tim Schmelter
1
你应该检查返回的值不是 DBNull - ta.speot.is
如果找不到个人的分数,将scorehulp声明为可空值类型(例如int?)可能不是一个坏主意。 - dana
4
为什么你在一个字符串字段中有一个数字? - SLaks
显示剩余4条评论
2个回答

11
您的SQL可能返回不同的数字类型,例如longdecimal,或者显然是string。请调用Convert.ToInt32,它没有拆箱转换的限制

0

我最初在我的C#代码中遇到了这个错误

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

其中TotalItemCountint类型,尽管存储过程没问题且能够给出正确的结果。我通过添加以下代码来修复存储过程,解决了这个问题。

Set @TotalRows =  @@rowcount.  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接