无法将类型'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();
}
答案 0 :(得分:0)
假设您的SqlHelper.ExecuteScalar
方法被宣布为返回object
,而不是SqlCommand
。实际上,我不会期望它返回SqlCommand
- 我希望它返回执行给定查询的结果。我怀疑你不想在第一时间打电话给ExecuteScalar
。
除了非常重要外,您当前的代码容易受到SQL injection attacks的攻击 - 您应该使用参数化SQL而不是直接将值嵌入到SQL中。
答案 1 :(得分:0)
从函数SqlHelper.ExecuteScalar
的名称看来,此函数执行命令并返回结果集,不是新的 SqlCommand。这就是你得到错误的原因。
其他一些事情,您应该始终使用参数化查询来保护自己免于Sql Injection