VB .NET OleDbCommand在SQL语句结束时返回Missing semicolon(;)

时间:2012-06-14 21:21:54

标签: sql vb.net ms-access insert oledbcommand

我正在使用VB .Net来循环一个正则表达式匹配并生成一个sql语句。我正在创建像这样的SQL

sql = "Insert Into Agencies (Address) Values"
While MatchObj.Success
    sql = sql & "(""" & MatchObj.Groups(1).Value & """), "
    MatchObj = MatchObj.NextMatch()
End While
sql = sql.Substring(0, Len(sql) - 2) & ";"

所以当我在创建它之后将sql打印到即时窗口时,我得到了这个:

Insert Into Agencies (Address) Values(" 1330 W Indian School Rd, "), (" 3323 E Baseline Rd, "), (" 207 N Gilbert Rd, "), (" 3160 S. Gilbert Rd., Ste. 4, ");

然后我使用sql语句创建OleDbCommand。我可以连接到数据库,但是当我运行.ExecuteNonQuery()时,我收到此错误:“在SQL语句结束时缺少分号(;)”

我的目标是使用单个INSERT将所有这些值放入DB列“地址”。

非常感谢任何帮助。

编辑: 这是我用来打开和执行

的子
Public Sub executeSQL(ByVal sql As String)
        Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Local Projects\AgenciesAZ.mdb'"
        Dim conn As OleDbConnection = New OleDbConnection(connString)
        Dim cmd As OleDbCommand = New OleDbCommand(sql, conn)


        conn.Open()
        cmd.ExecuteNonQuery() 'error hits here
        conn.Close()
End Sub

1 个答案:

答案 0 :(得分:2)

你需要拆分你的insert语句,你每次要在地址中插入一些内容时都必须使用“insert into ...”,如果你想在VB中只执行一次,你需要用分号(;)分隔每个语句,它应该工作

你需要做这样的事情。

Insert Into Agencies (Address) Values
 (" 1330 W Indian School Rd, ");
 Insert Into Agencies (Address) Values
 (" 3323 E Baseline Rd, ");
 Insert Into Agencies (Address) Values
 (" 207 N Gilbert Rd, ");
 Insert Into Agencies (Address) Values
 (" 3160 S. Gilbert Rd., Ste. 4, ");

修改

你应该

While MatchObj.Success
sql = " Insert Into Agencies (Address) Values"

    sql = sql & "(""" & MatchObj.Groups(1).Value & """); "
    MatchObj = MatchObj.NextMatch()
End While

虽然我强烈建议在单独的语句和事务中插入每个语句,但这取决于你。


修改2

您无法在MS-Access中同时插入多条记录,您必须按插入方式插入,例如...

Public Sub executeSQL(ByVal sql As String)
        Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Local Projects\AgenciesAZ.mdb'"
        Dim conn As OleDbConnection = New OleDbConnection(connString)
        Dim cmd As OleDbCommand = New OleDbCommand(sql, conn)


        conn.Open()
        cmd.ExecuteNonQuery()
        conn.Close()
End Sub

 While MatchObj.Success
    sql = " Insert Into Agencies (Address) Values"

        sql = sql & "(""" & MatchObj.Groups(1).Value & """); "
        executeSQL(sql )
        MatchObj = MatchObj.NextMatch()
    End While