我想避免从 vb.net 到 Access 数据库的重复插入数据

Posted

技术标签:

【中文标题】我想避免从 vb.net 到 Access 数据库的重复插入数据【英文标题】:I want to Avoid duplicated Insert data from vb.net to Access Database 【发布时间】:2021-09-22 11:06:14 【问题描述】:

我想避免重复什么正确的语法来做这个?

Dim StrInsert As String = "Insert Into Job (Name) Select @OtherInfo30 
                           WHERE @OtherInfo30 not in (select name from job)"

但是从哪里查询错了

【问题讨论】:

where not exists (select 1 from job where name=@otherinfo30) Dim StrInsert As String = "插入作业(名称)在不存在的地方选择 @OtherInfo30(从名称 =@otherinfo30 的作业中选择 1)" 将 cmd 作为新的 OleDbCommand(StrInsert, CON) cmd。 Parameters.AddWithValue("Name", row.Cells("otherinfo30").Value) 给我语法错误 查询表达式“@OtherInfo30 其中@OtherInfo30 不存在(从名称=@otherinfo30 的作业中选择1)”中的错误消息语法错误(缺少运算符)。 您将参数定义为不同的名称 我得到同样的错误你知道哪里而不是退出的另一种语法 【参考方案1】:

我不相信 Access SQL 支持插入时的 where 子句,更糟糕的是它肯定不支持子查询。

现在在“很多”情况下,如果行确实存在,那么我们经常想要更新该行,我可以发布代码。

但是,在这种情况下呢?我们测试该行是否存在,如果不存在,则运行插入命令。

是的,这确实意味着两个 SQL 语句,但我们确实 GET 以重用参数! (所以这不是太多的代码,也不是“太”糟糕。

所以这个:

    Dim strAddHotel As String = "Zoo5"

    Using cmdSQL As New OleDbCommand("SELECT ID FROM tblHotels WHERE HotelName = @Hotel",
                    New OleDbConnection(My.Settings.TESTAce))

        cmdSQL.Parameters.Add("@Hotel", OleDbType.VarWChar).Value = strAddHotel
        cmdSQL.Connection.Open()
        If cmdSQL.ExecuteScalar = 0 Then
            cmdSQL.CommandText = "INSERT into tblHotels (HotelName) VALUES(@Hotel)"
            cmdSQL.ExecuteNonQuery()
        End If

    End Using

【讨论】:

以上是关于我想避免从 vb.net 到 Access 数据库的重复插入数据的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET - VB.NET - 从 MS-Access 数据库中检索记录

VB6/Microsoft Access/DAO 到 VB.NET/SQL Server... 有建议吗?

从 Access 应用程序中分离出组件 VB

vb.net2010从ACCESS的OLE字段读出图片显示到PictureBox控件上

将 VB.NET 代码从 Visual Studio Express 复制到 Microsoft Access 2013

Access 数据库不会从 VB.NET 更新