Sql access中存在检查记录所需的VB.net帮助

Sql access中存在检查记录所需的VB.net帮助,sql,database,vb.net,Sql,Database,Vb.net,我正在编写一个程序,我正在制作一个部分,当您输入客户id时,它将删除记录。问题是,如果您输入id 30,但没有30,它仍将继续并删除它,即使没有具有该id的记录存在。我想让它显示一条消息,说明没有记录存在,但我下面的代码不起作用。我真糊涂 我在这里找到了代码,我正试图在我的设计中实现它,但它不起作用。正如您所看到的,我标记了我的原始代码,但我尝试使用这个新代码。救命啊 运行时收到的错误是:关键字不受支持:“提供程序” 代码: Private子客户端(ByVal ans作为字符串) Dim con

我正在编写一个程序,我正在制作一个部分,当您输入客户id时,它将删除记录。问题是,如果您输入id 30,但没有30,它仍将继续并删除它,即使没有具有该id的记录存在。我想让它显示一条消息,说明没有记录存在,但我下面的代码不起作用。我真糊涂

我在这里找到了代码,我正试图在我的设计中实现它,但它不起作用。正如您所看到的,我标记了我的原始代码,但我尝试使用这个新代码。救命啊

运行时收到的错误是:关键字不受支持:“提供程序”

代码:

Private子客户端(ByVal ans作为字符串)
Dim con1为SqlConnection=newSQLConnection(“Provider=Microsoft.ACE.OLEDB.12.0;数据源=。\Database.accdb”)
如果con1.State=ConnectionState.Closed,那么con1.Open()
将查询设置为字符串=“从tbl中选择*,其中ID=?”
Dim cmd1 As SqlCommand=新SqlCommand(查询,con1)
cmd1.Parameters.AddWithValue(“?”,OleDbType.VarChar).Value=ans
将读卡器用作SqlDataReader=cmd1.ExecuteReader()
如果reader.HasRows那么
'用户存在删除
Dim cmd As SqlCommand=New SqlCommand(“从tbl中删除,其中ID=?”,con1)
cmd.ExecuteNonQuery()
其他的
'用户不存在抛出消息
MsgBox(“记录不存在”,MsgBoxStyle.Information,“添加新客户!”)
如果结束
终端使用
con1.Close()
端接头

由于我使用SQL语句连接到ACCESS数据库,它无法正常工作,因此我需要回到根目录,使用正确的OleDb语句。 在我的情况下,可行的代码如下:

Private Sub DeleteClient(ByVal ans As String)
    If con.State = ConnectionState.Closed Then con.Open()

    cmd = New OleDbCommand
    cmd.Connection = con
    cmd.CommandText = "DELETE FROM tbl WHERE ID = ?"
    cmd.Parameters.Add("?", OleDbType.VarChar).Value = ans
    If cmd.ExecuteNonQuery() = 0 Then
        MsgBox("ID Does not exist!", MsgBoxStyle.Critical, "Enter new customer ID!")
    Else
        MessageBox.Show("The entered ID has now been deleted.", "Deletion Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End If
    cmd.ExecuteNonQuery()
    con.Close()
End Sub

我很欣赏你的想法:除非行存在,否则不要执行删除查询。但是,结果是您执行了另一个查询,因此当它不存在时,查询计数甚至会增加,但当它确实存在时,您触发了2。A)
cmd.ExecuteNonQuery()
是一个返回受影响行数的函数,因此您可以知道是否有受影响行。b) 如果您使用的是DataTable,您可以从中知道它是否存在(但仍然不需要)。因此,您正在尝试使用为SQL Server构建的类更新MS Access数据库。不,那根本不行。使用OleDb命名空间中的类。(OleDbConnection、OleDbCommand等)当然,正如@puropoix所说,如果您计划删除该记录,则无需检查该记录是否存在。只需删除并从ExecuteNonQuery中获取结果
我如何设置它,以便它检查行是否存在
阅读第一条注释:您不存在。不需要运行初步查询来查看是否应该运行真正的查询。它不保存任何内容
如果cmd.ExecuteNonQuery()=0,则不存在删除的其他客户
记录是否显示在DGV或其他内容中?我的用户几乎看不到Id/PK,除非它有一些业务含义(自然的、非AI类型的PK),就像Proputix的意思:
cmd.CommandText=“从tblcustomer中删除,其中CustomerID=?”:cmd.Parameters.Add(“?”,OleDbType.VarChar)。Value=ans:如果cmd.ExecuteNonQuery()=0,那么MsgBox(“记录不存在”,MsgBoxStyle.Information,“添加新客户!”)如果在底部有一个额外的
cmd.ExecuteNonQuery()
,则结束,并且应该处理cmd对象。请参见。如果有帮助,请向上投票您还可以在每次需要时安全地创建一个新连接(将其包含在Using语句中)。连接将自动为您合并。因此,这不会每次都创建物理连接。