private void button1_Click(object sender, EventArgs e)
        {
           
            if (textBox4.Text == "")
            {
                MessageBox.Show("请输入年龄!");
                return;
            }
            if (textBox7.Text == "")
            {
                MessageBox.Show("请输入工龄!");
                return;
            }
            if (comboBox1.Text == "")
            {
                MessageBox.Show("请选择部门!");
                return;
            }
            int age = Convert.ToInt32(textBox4.Text);
            int gonglin = Convert.ToInt32(textBox7.Text);            String cnno = "Data Source=HP-PC;Initial Catalog=FIRST;Integrated Security=True;Pooling=False";
            SqlConnection connection = new SqlConnection(cnno);
            string sql = string.Format("Insert into Xinxi values('{0}','{1}','{2}',{3},'{4}','{5}',{6},'{7}','{8}','{9}') ", textBox1.Text, textBox2.Text, textBox3.Text, age, comboBox1.Text, textBox6.Text, gonglin, textBox8.Text, textBox9.Text, textBox10.Text);
           
            connection.Open();
            SqlCommand command = new SqlCommand(sql, connection);
            //int num = Convert.ToInt32(command.ExecuteScalar());
            int num = command.ExecuteNonQuery();
            try
            {
                if (num > 0)
                {                    MessageBox.Show("添加成功!");
                    this.Close();
                }
                else
                {
                    MessageBox.Show("添加失败!");
                }
            }
            catch (Exception ex)
            {                MessageBox.Show("错误异常" + ex);
            }
            finally
            {
                connection.Close();
            }        }
这是我刚写的。。往数据库里加信息,其中Xno是主键,在添加一样的主键时会提示出错,得怎么改呀。。在下新手,求大神指导。。

解决方案 »

  1.   

    要是不想出错,而且要重复,就把Xno主键设成非主键.
      

  2.   

    真心没听懂什么意思楼主的意思是插入时界面就报错,这个没有道理啊,就算是主键的话插入会有.net相关的提示,比如违反了什么。。什么主键不能重复的约束
      

  3.   

    还有就是,为秘既然设了主键你还要插入同样的数据你要是硬想这样做那就try起来吧把异常抛弃掉就不会报错了但是这种做法有点匪夷所思。另外你的是用了try,但是应该用在执行的地方,你那里都执行完了,用try没意义了啊connection.Open();
                SqlCommand command = new SqlCommand(sql, connection);
                //int num = Convert.ToInt32(command.ExecuteScalar());
                try
                {
                    int num = command.ExecuteNonQuery();
                
                    if (num > 0)
                    {                    MessageBox.Show("添加成功!");
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("添加失败!");
                    }
                }
                catch (Exception ex)
                {                MessageBox.Show("错误异常" + ex);
                }
                finally
                {
                    connection.Close();
                }
      

  4.   

    Quote: 引用 9 楼 comcyd 的回复:

    还有就是,为秘既然设了主键你还要插入同样的数据你要是硬想这样做那就try起来吧把异常抛弃掉就不会报错了但是这种做法有点匪夷所思。另外你的是用了try,但是应该用在执行的地方,你那里都执行完了,用try没意义了啊
    这样说吧。。我的表里Xno是主键,我想要的效果是,表里有1号职工,在我输入的时候,如果我插入2号,就插入成功,如果我插入1号的话,就提示我“此编号存在”。。这样可以明白了吧,嘿嘿
      

  5.   

    这样说吧。。我的表里Xno是主键,我想要的效果是,表里有1号职工,在我输入的时候,如果我插入2号,就插入成功,如果我插入1号的话,就提示我“此编号存在”。。这样可以明白了吧,嘿嘿
      

  6.   

    这样说吧。。我的表里Xno是主键,我想要的效果是,表里有1号职工,在我输入的时候,如果我插入2号,就插入成功,如果我插入1号的话,就提示我“此编号存在”。。这样可以明白了吧,嘿嘿
      

  7.   

    插入以前,
    先 select 一下呗
    或者 catch 里面 写 
    编号已存在
      

  8.   


    你把上面的代码异常那里改下面这个就是你要的结果了,不过ex的内容差不多也是这个意思啦:            try
                {
                    int num = command.ExecuteNonQuery();
                    if (num > 0)
                    {
                        MessageBox.Show("添加成功!");
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("添加失败!");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("“此编号存在");
                }