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を作成した直後のウィンドウに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 を作成します。DB に接続できますが、.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

挿入ステートメントを分割する必要があります。アドレスに何かを挿入するたびに「insertinto...」を使用する必要がありますが、VBで1回だけ実行する場合は、各ステートメントを分離する必要があります。セミコロン(;)を使用すると、機能するはずです

あなたはこのようなことをする必要があります。

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 に答える