我正在调用存储过程,它会检查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);
}
}
答案 0 :(得分:1)
您是否已尝试自行运行存储过程"" (即在数据库中的查询分析器中)并查看当两个条件都允许更新发生时过程返回的内容?我没有看到任何明显错误的代码,所以我想知道存储的proc是否返回了一个NULL,它会杀死你的switch语句。
答案 1 :(得分:0)
看,我注意到有一个你不会使用的参数" @ Username",尝试删除它,如果它没有解决问题,请将其查询改为上面的并再次执行。
//新查询只是为了测试 "选择count(1)FROM myTable WHERE TempID = @ TempID"
我希望它有所帮助。