使用C#无法将对象从DBNull强制转换为其他类型错误

时间:2015-02-06 01:50:13

标签: c# asp.net

我正在调用存储过程,它会检查2件事情,并根据它显示消息,但如果两个条件都很好,那么它会更新表格。该表已正确更新,但最后我收到此错误: "对象不能从DBNull转换为其他类型"。我不确定为什么会这样,因为我在其他地方使用了类似的代码。它在这一行失败了

 userId = Convert.ToInt32(cmd.ExecuteScalar());

这里有代码

protected void Ccs_Click(object sender, EventArgs e)
        {

            string Ques = secQues.SelectedValue;

           int userId = 0;

           using (SqlConnection con = new SqlConnection(constr))
           {
               using (SqlCommand cmd = new SqlCommand("myStPR"))
               {
                   using (SqlDataAdapter sda = new SqlDataAdapter())
                   {


                       cmd.CommandType = CommandType.StoredProcedure;

                       cmd.Parameters.Add("@TempID", SqlDbType.VarChar).Value = tempID.Text.Trim();
                       cmd.Parameters.Add("@Username", SqlDbType.VarChar).Value = txtUID.Text.Trim();
                       cmd.Parameters.Add("@Loc", SqlDbType.VarChar).Value = txtLoc.Text.Trim();

                       cmd.Connection = con;
                       con.Open();
                       userId = Convert.ToInt32(cmd.ExecuteScalar());
                       con.Close();
                   }
               }
               string message = string.Empty;
               switch (userId)
               {
                   case -1:
                       message = "some message.";
                       break;
                   case -2:
                       message = "some message";
                       break;
                   default:
                       message = "Registration successful. You will receive an email once your application is approved.  Thanks.";

                       break;
               }
               ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true);

           }

        }

2 个答案:

答案 0 :(得分:1)

您是否已尝试自行运行存储过程"" (即在数据库中的查询分析器中)并查看当两个条件都允许更新发生时过程返回的内容?我没有看到任何明显错误的代码,所以我想知道存储的proc是否返回了一个NULL,它会杀死你的switch语句。

答案 1 :(得分:0)

看,我注意到有一个你不会使用的参数" @ Username",尝试删除它,如果它没有解决问题,请将其查询改为上面的并再次执行。

//新查询只是为了测试 "选择count(1)FROM myTable WHERE TempID = @ TempID"

我希望它有所帮助。