设置了主键
Dim tb1 As DataTable = das.Tables("book")
        tb1.PrimaryKey = New DataColumn() {tb1.Columns("uid")}
程序上已经实现了Datagrid显示的内容唯一
但是我想在用户输入的时候给他提示说“此编号已存在”
大概像这样子
If TextBox1.Text =????? Then
Label2.Text = "此编号已存在"
Else
cmd.Parameters.Add("@uid", SqlDbType.Char).Value = Me.TextBox1.Text.Trim
End If

解决方案 »

  1.   

    SQL查:
    select 1 from tablename where uid=用户输入的uid
      

  2.   

    用select取出这一字段的值,再判断一下,是否有相同的
      

  3.   

    我这个本来就是写在SQL里面,还要再写啊,怎么写?,说一下完整的,插在哪里,我很笨,不懂
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Try
                Dim cnn As SqlConnection
                Dim cmd As SqlCommand
                cnn = New SqlConnection("user id=sa;database=address;data source=localhost")
                cnn.Open()
                cmd = New SqlCommand("insert into adbook ( uid,name,dep,tel,nx,pho,fax,web,bz) values(@uid,@name,@dep,@tel,@nx,@pho,@fax,@web,@bz)", cnn)
                cmd.Parameters.Add("@dep", SqlDbType.Char).Value = Me.TextBox3.Text.Trim
                If TextBox1.Text = "" Or TextBox2.Text = "" Then
                    Label2.Text = "员工编号和姓名不能为空"
                    Me.Panel1.Visible = True
                Else
                    cmd.Parameters.Add("@uid", SqlDbType.Char).Value = Me.TextBox1.Text.Trim
                    cmd.Parameters.Add("@name", SqlDbType.Char).Value = Me.TextBox2.Text.Trim
                End If
                cmd.Parameters.Add("@tel", SqlDbType.Char).Value = Me.TextBox4.Text.Trim
                cmd.Parameters.Add("@nx", SqlDbType.Char).Value = Me.TextBox5.Text.Trim
                cmd.Parameters.Add("@pho", SqlDbType.Char).Value = Me.TextBox6.Text.Trim
                cmd.Parameters.Add("@fax", SqlDbType.Char).Value = Me.TextBox7.Text.Trim
                cmd.Parameters.Add("@web", SqlDbType.Bit).Value = Checkbox2.Checked
                cmd.Parameters.Add("@bz", SqlDbType.Char).Value = Me.TextBox8.Text.Trim
                cmd.ExecuteNonQuery()
                cnn.Close()
            Catch ex As Exception        End Try        loadgrid()
            
        End Sub
      

  4.   

    上面的人的意思就是说在你的上面代码
     cmd.ExecuteNonQuery()
                cnn.Close()前任何地方加入一个构造sql语句select count(0) from tablename where uid=用户输入的uid ,然后执行这个sql语句看看执行结果是否》0;如果是则不执行插入
      

  5.   

    我用的偷懒的方法,先在数据库中设置好唯一性约束,然后用try catch捕获插入异常,出现异常就表示数据不能插入,也就是说跟数据库里面的重复了
      

  6.   

    zzzz
    出现异常不一定是数据重复了,可能是sql语句构造错误了,这样简单的是不行的
      

  7.   

    我在cmd.ExecuteNonQuery()
                cnn.Close()中间加 
    Dim cmm As SqlCommand
                cmm = New SqlCommand("select count(0) from myweb where (uid2=@uid2)", cnn)
                cmm.Parameters.Add("@uid", SqlDbType.Char).Value = Me.TextBox1.Text.Trim
                cmm.ExecuteNonQuery()
                If cmm.ExecuteNonQuery > 0 Then
                    Label2.Text = "此编号已存在"
                                End If
    根本不起作用
      

  8.   

    If cmm.ExecuteNonQuery > 0 Then
    你知道excutenonquery和excutescalar的区别么?lz你自己要动脑筋思考,“执行这个sql语句看看执行结果”是要你得到执行sql以后能得到这个uid记录的数目!不是你那样的,而且对于select,excutenonquery没有实际意义!
      

  9.   

    If cmm.ExecuteScalar > 0 Then
                    Label2.Text = "此编号已存在"
    这样子吗,我根本都不懂这些,只懂用过的,我学程序到现在还不到两个月,之前是完全不懂,现在是东抄抄西抄抄
      

  10.   

    cmm.ExecuteNonQuery()
    那里换下面DataReader dr=cmm.ExecuteReader();
    if(dr.Read())
    {
      Label2.Text = "此编号已存在"}
    dr.close();
      

  11.   

    LZ,为什么不在TextBox内容改变后,就马上判断呢!
    也就是写在
     pirvate textbox1_TextChange(object sender,System.EventArgs e)  //里进行判断呢?  ..
      string my_sql="select * from xxx where id=@id";  //也可以是count(*)等等  ....
      if(myRead.Read())
      {
        //已存在
       }
      。
      

  12.   

    谢谢xray2005,按你说的实现了,原来textbox还有 pirvate textbox1_TextChange这个的,以前都没用过,现在终于知道把程序放哪里了