将类型'object'转换为'System.Data.SqlClient.SqlCommand错误

时间:2013-04-18 09:27:57

标签: c# umbraco

无法将类型'object'隐式转换为'System.Data.SqlClient.SqlCommand'。存在显式转换(您是否错过了演员?)

创建Usercontrol时出现此错误

它在此代码中。

  protected void gvDetails_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int Slno = Convert.ToInt32(gvDetails.DataKeys[e.RowIndex].Value.ToString());
var ProductNum = gvDetails.DataKeys[e.RowIndex].Values["ProductNumber"].ToString();
TextBox txtShortDesc = (TextBox)gvDetails.Rows[e.RowIndex].FindControl("ShortDesc");
SqlCommand cmd= SqlHelper.ExecuteScalar(GlobalSettings.DbDSN, CommandType.Text,"UPDATE sydShortDesc set ShortDesc='"+ txtShortDesc.Text+ " ' WHERE ProductNumber='"+ ProductNum +"'  ");
cmd.ExecuteNonQuery();
lblresult.ForeColor = Color.Green;
lblresult.Text = username + " Details Updated successfully";
gvDetails.EditIndex = -1;
BindEmployeeDetails();
}

2 个答案:

答案 0 :(得分:0)

假设您的SqlHelper.ExecuteScalar方法被宣布为返回object,而不是SqlCommand。实际上,我不会期望它返回SqlCommand - 我希望它返回执行给定查询的结果。我怀疑你不想在第一时间打电话给ExecuteScalar

除了非常重要外,您当前的代码容易受到SQL injection attacks的攻击 - 您应该使用参数化SQL而不是直接将值嵌入到SQL中。

答案 1 :(得分:0)

从函数SqlHelper.ExecuteScalar的名称看来,此函数执行命令并返回结果集,不是新的 SqlCommand。这就是你得到错误的原因。

其他一些事情,您应该始终使用参数化查询来保护自己免于Sql Injection