0

タイプ '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();
}
4

2 に答える 2

0

関数の名前から、この関数は新しいSqlCommandSqlHelper.ExecuteScalarではなく、コマンドを実行して結果セットを返すように見えます。そのため、エラーが発生しています。

他にもいくつかありますが、 SQLインジェクションから身を守るために、常にパラメーター化されたクエリを使用する必要があります

于 2013-04-18T09:30:54.613 に答える
0

おそらく、あなたのSqlHelper.ExecuteScalarメソッドは returnobjectではなくreturn と宣言されていSqlCommandます。実際、私はそれが返されるとは思っSqlCommandていません-指定されたクエリを実行した結果が返されることを期待しています。ExecuteScalarそもそも電話をかけたくないのだと思います。

非常に重要な点として、現在のコードはSQL インジェクション攻撃に対して脆弱です。値を SQL に直接埋め込むのではなく、パラメーター化された SQL を使用する必要があります。

于 2013-04-18T09:30:11.667 に答える