我希望VB中的代码检查数据库中的值是否存在。
这是我的代码
conn.open()
Dim select As New OleDbCommand
select.Connection = conn
select.CommandText = " SELECT COUNT(*) FROM your_table WHERE field = textbox.value"
if count>0
MsgBox("already exists")
conn.close()
但它不起作用。
答案 0 :(得分:1)
您的查询错误,您不会以这种方式将文本框值放在查询中 您应该始终使用参数化查询
Dim commandText = "SELECT count(*) from your_table where field = ?"
Using(conn = new OleDbConnection(.....)
Using(select = New OleDbCommand(commandText, conn)
conn.open()
select.Parameters.Add("@p1", textbox.value)
Dim count = Convert.ToInt32(select.ExecuteScalar())
if count > 0 Then
MsgBox(" already exsist ")
End If
End Using
End Using
在此处设置命令文本中的参数占位符(?),并将参数添加到命令及其值。之后,您需要执行该命令。在您的情况下,您只需要一个值作为从命令返回的值,因此ExecuteScalar是正确的使用方法。
另请注意,连接和命令是一次性对象,因此在您不再需要时应关闭并处理。为此,正确的方法是Using Statement
答案 1 :(得分:0)
您的查询不正确
"SELECT COUNT(*) FROM your_table WHERE field = textbox.value"
将其更改为
"SELECT COUNT(*) FROM your_table WHERE field = '" & textbox.text & "'"
1)Winforms TextBox控件剂量没有Value属性。它有文本属性(我假设您正在使用文本框控件)
2)您需要发送Textbox.Text中包含的值而不是“TextBox.Value”。因此,您在新查询
中添加了两个字符串3)然后&你的if语句中缺少endif
4)这不是@steve和其他人提到的使用查询的正确方法。
答案 2 :(得分:0)
这很好用。
Public Sub insrt()
con.Open()
Dim cmd1 As New OleDbCommand("select count(*) from tbcat where catname=?", con)
cmd1.Parameters.Add("@cat", OleDbType.VarChar).Value = txtcourse.Text
Dim count = Convert.ToInt32(cmd1.ExecuteScalar)
If count > 0 Then
MsgBox("Already Exist")
'Exit Sub
Else
Dim cmd As New OleDbCommand("insert into tbCat(Catcode,catname,protype)values('" & txtcode.Text & "','" & txtcourse.Text & "','" & txttype.Text & "')", con)
cmd.ExecuteNonQuery()
cmd.Dispose()
'con.Close()
display_course()
txtcode.Text = String.Empty
txtcourse.Text = String.Empty
End If
cmd1.Dispose()
con.Close()
End Sub