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