0

質問: データベースに挿入すると、データが複製されます。データベースに重複エントリを作成しないようにするにはどうすればよいですか?

を使用しないことによる SQL インジェクションの保護/防止について読みました。

texboxt1.text 

なので使ってみた

parameters.add()

ただし、エントリは挿入ごとに複製されます。

これはデータベースのイメージです...

ここに画像の説明を入力

これは私のコードです

  protected void Button1_Click(object sender, EventArgs e)
    {
        string username = txtuser.Text;
        string firstname = txtfirst.Text;
        string lastname = txtlast.Text;
        string email = txtemail.Text;
        string password = txtpass.Text;
        string gender = rbgender.Text;
        string nationality = ddcountry.Text;

        string Connect_string = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
        SqlConnection Connect = new SqlConnection(Connect_string);

        Connect.Open();

        string pass = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5");
        SqlCommand Command = new SqlCommand("INSERT INTO [Users] (username, firstname, lastname, email, password, gender, nationality) VALUES (@username, @firstname, @lastname, @email, @password, @gender, @nationality)", Connect);
        Command.Parameters.AddWithValue("@username", username);
        Command.Parameters.AddWithValue("@firstname", firstname);
        Command.Parameters.AddWithValue("@lastname", lastname);
        Command.Parameters.AddWithValue("@email", email);
        Command.Parameters.AddWithValue("@password", pass);
        Command.Parameters.AddWithValue("@gender", gender);
        Command.Parameters.AddWithValue("@nationality", nationality); 
        Command.ExecuteNonQuery();


        int success = Command.ExecuteNonQuery();

        if (success > 0)
        {
            Label1.ForeColor = System.Drawing.ColorTranslator.FromHtml("#12223");
            Label1.Visible = true;
            Label1.Text = "You have successfully registered";
            Connect.Close();
        }
        else
        {
            Label1.Text = "Your information has not been entered to database";
            Connect.Close();
        }

INSERT INTO Table () VALUE '"+textbox1.text +"' を使用すると、重複することはありませんが、SQL インジェクションのようなものです。

4

2 に答える 2

5

実際にコマンドを起動する ExecuteNonQuery への呼び出しが 2 つあります。

    Command.Parameters.AddWithValue("@nationality", nationality); 
    Command.ExecuteNonQuery(); //CALLED HERE First Time

    int success = Command.ExecuteNonQuery(); //CALLED HERE Second Time (This is the one you want)

    if (success > 0)
    {
        Label1.ForeColor = System.Drawing.ColorTranslator.FromHtml("#12223");
        Label1.Visible = true;
        Label1.Text = "You have successfully registered";
        Connect.Close();
    }
于 2013-06-27T02:39:47.627 に答える
2

次の行で、クエリを 2 回実行しています。

Command.ExecuteNonQuery();

int success = Command.ExecuteNonQuery();

最初のものを削除しCommand.ExecuteNonQuery()、2 番目のものをint success.

于 2013-06-27T02:39:35.690 に答える