0

あらかじめお詫び申し上げます - 私はビジュアル スタジオ (およびプログラミング全般) の初心者です。

次のコードを使用して、landlord と property の 2 つのアクセス テーブルにデータを入力しようとしていますが、取得し続けます

「SQL ステートメントの末尾にセミコロン (;) がありません。」

助言がありますか ?コードは次のとおりです。

Dim aConnection As OleDbConnection
Dim aCommand As OleDbCommand
Dim aConnectionString, aQuery As String
Dim Username As String = txtUsername.Text
Dim Pword As String = TextBox2.Text
Dim EmailDetails As String = TextBox9.Text
Dim Question As String = DropDownList2.Text
Dim Answer As String = TextBox4.Text

aConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " _
& Server.MapPath("AppData/RMT.accdb")
aConnection = New OleDbConnection(aConnectionString)
aConnection.Open()
aQuery = "Insert Into Landlord (Username, email, Security_Question, Security_Answer, Pword, Status) Values ('" & Username & "','" & EmailDetails & "','" & Question & "','" & Answer & "', '" & Pword & "','pending')Into Property Values (26,46,'marysway','MarysRd','Marysville','Cork North')"
aCommand = New OleDbCommand(aQuery, aConnection)
aCommand.ExecuteNonQuery()

aConnection.Close()
4

1 に答える 1

1

Microsoft Access の ADO.NET プロバイダーは、同じクエリ文字列で複数の挿入ステートメントをサポートしているとは思いません。ただし、確認のために、次のように記述してみてください。

aQuery = "Insert Into Landlord (Username, email, Security_Question, Security_Answer, " & _ 
         "Pword, Status) Values ('" & Username & "','" & EmailDetails & "','" & _
         Question & "','" & Answer & "', '" & Pword & "','pending');" & _
         "Insert Into Property Values (26,46,'marysway','MarysRd','Marysville','Cork North')"

最初の INSERT ステートメントと 2 番目のステートメントの間のセミコロンに注意してください (ちなみに、元のコードには 2 番目の INSERT キーワードがありませんでした)。

データベース エンジンに渡すクエリ テキストを作成するときは、常に OleDbCommand のパラメーター コレクションを使用することをお勧めします。これにより、テキスト解析の問題を回避できます (入力テキストの一重引用符ですべてが壊れます)。また、コードがSQL インジェクション攻撃
にさらされることもありません。

Using aConnection = New OleDbConnection(aConnectionString)
    aConnection.Open()

    aQuery = "Insert Into Landlord (Username, email, Security_Question, " + 
             "Security_Answer, Pword, Status) Values (?, ?, ?,?,?,'pending')"
    aCommand = New OleDbCommand(aQuery, aConnection)
    aCommand.Parameters.AddWithValue("@usr", Username)
    aCommand.Parameters.AddWithValue("@email", EmailDetails)
    aCommand.Parameters.AddWithValue("@qst", Question)
    aCommand.Parameters.AddWithValue("@ans", Answer)
    aCommand.Parameters.AddWithValue("@pwd", Pword)
    aCommand.ExecuteNonQuery()

    aQuery = "Insert Into Property Values (26,46,'marysway','MarysRd','Marysville','Cork North')"
    aCommand = New OleDbCommand(aQuery, aConnection)
    aCommand.ExecuteNonQuery()

End Using
于 2012-11-16T16:32:14.180 に答える