1

私は以前にこれを投稿しようとしましたが、コードエディタが正しく不完全に投稿したため、削除する必要がありました。さらに、メンバーにSQLインジェクションについて質問してもらいました。

ストーリーは次のとおりです。

データベースに送信する前に、ユーザーが自分の情報を確認できるページがあります。サーバーエラーが発生しないように、送信する前にその主キーが存在するかどうかを確認するだけです。

私のページ読み込みイベントには、次のものがあります。

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString);

SqlCommand oldcmd = new SqlCommand("SELECT * from dbo.registrar WHERE [MY ID] = '"+ID+"'", conn);
oldcmd.CommandType = CommandType.Text;

SqlDataAdapter da = new SqlDataAdapter(oldcmd);
DataTable dt = new DataTable();
da.Fill(dt);

if (dt.Rows.Count >= 1)
{
   lblExists.Visible = true;
   lblExists.ForeColor = System.Drawing.Color.Red;
   lblExists.Text = "Oops! Our records show that you have already signed up for this service. Please check your information or contact your administrator for further assistance.";
}

データベースにレコードがないのにラベルが表示され、間違っていることがわかります。

4

1 に答える 1

6

これを試して。

SqlCommand oldcmd = new SqlCommand("SELECT COUNT(*) from dbo.registrar WHERE [MY ID] = @id", conn);
oldcmd.Parameters.Add("@id", SqlDbType.Int);
oldcmd.Parameters["@id"].Value = ID;

if ((int)oldcms.ExecuteScalar() >= 1)
{
    lblExists.Visible = true;
    lblExists.ForeColor = System.Drawing.Color.Red;
    lblExists.Text = "Oops! Our records show that you have already signed up for this service. Please check your information or contact your administrator for further assistance.";
}
else
{
    lblExists.Visible = false;
}
于 2012-05-04T13:39:34.150 に答える