【问题标题】:Duplicate entries in database. ASP.NET - C# - SQL Server 2012数据库中的重复条目。 ASP.NET - C# - SQL Server 2012
【发布时间】:2013-06-24 09:27:23
【问题描述】:

问题:插入数据库时​​数据重复。如何不在数据库中创建重复条目?

我读到了关于通过不使用来保护/防止 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 注入的东西。

【问题讨论】:

    标签: c# asp.net database parameters duplicates


    【解决方案1】:

    您有两次调用 ExecuteNonQuery 实际触发命令:

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

    【讨论】:

      【解决方案2】:

      您正在执行两次查询,通过这些行:

      Command.ExecuteNonQuery();
      
      int success = Command.ExecuteNonQuery();
      

      删除第一个 Command.ExecuteNonQuery() 并保留第二个 int success

      【讨论】:

      • 现在说得通了。谢谢卡尔。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 2015-04-19
      相关资源
      最近更新 更多