0

我正在使用 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
4

1 回答 1

2

您需要拆分插入语句,每次要在地址中插入内容时都必须使用“插入...”,而且如果您只想在 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
于 2012-06-14T21:27:20.717 回答