点击Button触发,附上Button中的代码:
protected void Button1_Click(object sender, EventArgs e)
    {        SqlConnection conn=new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True;User Instance=True");        DataSet ds=new DataSet();
        SqlDataAdapter daAuthors=new SqlDataAdapter("SELECT * FROM test",conn);
        SqlCommandBuilder bldr=new SqlCommandBuilder(daAuthors);        daAuthors.Fill(ds);        DataTable tbl=ds.Tables["Table"];
        DataColumn[] colArr=new DataColumn[1];
        colArr[0]=tbl.Columns[0];
        tbl.PrimaryKey=colArr;        object[] rowVals=new object[4];
        rowVals[0] = TextBox1.Text.Trim();
        rowVals[1] = TextBox2.Text.Trim();
        rowVals[2] = TextBox3.Text.Trim();
        rowVals[3] = TextBox4.Text.Trim();        DataRow insertedRow=tbl.Rows.Add(rowVals);
        conn.Open();
        daAuthors.Update(ds);数据库是我自建的,里面又自建了个表,共4列:ID,Name,Add,Tel。其中ID设为主键。
在4个TextBox输入值后,点击BUTTON,出现错误提示:列“ID”被约束为是唯一的。值“10”已存在。
错误行在: DataRow insertedRow=tbl.Rows.Add(rowVals);虽然报错,但是当我进入数据库时,发现表中数据已经被添加更新了,就是TextBox中输入的数据,而且ID的值也是刚才输入的值。
不知道为什么会出现这种情况?不知道跟ID设为主键有没有关系?求教。我是新人,基础比较弱

解决方案 »

  1.   

    你数据库中没设置主键,而你的DataTable里面设置了主键
      

  2.   

    最好不要让用户输入id,而在数据库中设置为自动增长。因为用户插入了2条记录,id一样,而主键必须是唯一的,就会出现这样的错误。
      

  3.   


    我建的表,共4列:ID,Name,Add,Tel,那如果将ID设置为主键,然后并设置为自动增长。那么我想将TextBox1,TextBox2,TextBox3中的值分别插入到表中对应的Name,Add,Tel(相当于ID不插),请问该如何改代码?
      

  4.   


    我建的表,共4列:ID,Name,Add,Tel,如果将ID设置为主键,然后并设置为自动增长。那么我想将TextBox1,TextBox2,TextBox3中的值分别插入到表中对应的Name,Add,Tel(相当于ID不插),请问该如何改代码?
      

  5.   

    String sql = "INSERT INIO test (Name,Add,Tel) Values(@Name,@Add,@Tel)";
    conn.Open();
    SqlCommand cmd = new SqlCommand(sql,conn);
    cmd.Parameters.AddWithValue("@Name",TextBox1.Text);
    cmd.Parameters.AddWithValue("@Add",TextBox2.Text);
    cmd.Parameters.AddWithValue("@Tel",TextBox3.Text);
    cmd.ExecuteNonQuery();
    cmd = new SqlCommand("SELECT * FROM test",conn);
    SqlDataReader dr = cmd.ExecuteReader();
    GridView1.DataSource = dr;
    GridView1.DataBind();
    conn.Dispose();