2012-06-14 89 views
0

我正在使用VB .Net循環遍歷一個正則表達式匹配並生成一條sql語句。我創建了這樣的SQLVB .NET OleDbCommand在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將所有這些值進入數據庫列「地址」。

任何幫助,非常感謝。

編輯: 這裏是我用來打開和執行

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 
+2

哪個數據庫?您能否顯示使用的連接字符串以及用於將命令發送到數據庫的代碼? – Steve

+0

您使用雙引號而不是括號內的單引號括起來。當你使用單引號時會發生什麼:'... Values('123 ABC,'),('456 XYX,');'? – TLS

+0

單引號返回相同的錯誤 – user1457296

回答

2

你需要分割你的INSERT語句子,你必須使用「插入......」每一次你想要在地址中插入一些東西,但是如果你想在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 
+0

我還在最終會出現相同的錯誤。我不確定我是否明白這應該看起來像一個字符串變量。我需要添加換行嗎?也許你可以把這個格式爲:sql =「」 感謝你的快速回復 – user1457296

+0

OP沒有提到數據庫是SQL Server,所以'GO'不一定是一個選項。無論如何,'GO'在代碼中都不起作用,它不是關鍵字。這只是SSMS分解腳本的一個指標(實際上,如果你願意,你可以從SSMS選項中更改「GO」)。 – Bridge

+0

正確,這不是sql服務器,所以我使用OleDbCommand ...不是sqlCommand – user1457296