繁体   English   中英

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

[英]convert type 'object' to 'System.Data.SqlClient.SqlCommand Error

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

创建用户控件时出现此错误

它是在此代码中。

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

好吧,大概是您的SqlHelper.ExecuteScalar方法被声明为返回object ,而不是SqlCommand 确实,我不希望它返回SqlCommand希望它返回执行给定查询的结果。 我怀疑您不想一开始就调用ExecuteScalar

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

从函数SqlHelper.ExecuteScalar的名称看来,此函数将执行命令并返回结果集, 而不是新的 SqlCommand。 这就是为什么您得到错误。

另外,您应该始终使用参数化查询来使自己免受Sql Injection的攻击

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM