0

これは、データベースにデータを挿入しようとしている私のコードです。構文エラーは表示されませんでしたが、データは送信されません。

 Sub submit(ByVal sender As Object, ByVal e As EventArgs)
    Dim objConn As New OleDbConnection
    Dim objCmd As New OleDbCommand
    Dim strConnString, strSQL As String

    strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.MapPath("Mydatabase.mdb") & ""

    strSQL = "INSERT INTO tblRecord (CNIC,Names,City,Address,Number) " & " VALUES " & " ('" & cnic.Text & "','" & name.Text & "','" & city.Text & "','" & postal.Text & "','" & phone.Text & "')"
    objConn.ConnectionString = strConnString
    objConn.Open()

    With objCmd
        .Connection = objConn
        .CommandText = strSQL
        .CommandType = CommandType.Text
    End With

    Try
        objCmd.ExecuteNonQuery()
        Label1.Text = "Record Inserted Sucessfully."
        Label1.Visible = True
    Catch ex As Exception
        Label1.Visible = True
        Label1.Text = "Record Cannot Insert" & ex.ToString()
    End Try

    objConn.Close()

End Sub

これは私が得る例外です:

System.Data.OleDb.OleDbException: INSERT INTO ステートメントの構文エラーです。

System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr)
で System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams、Object& executeResult) で System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
で System.Data.
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 動作、文字列メソッド)でOleDb.OleDbCommand.ExecuteCommand(CommandBehavior 動作、Object& executeResult) ASP.registration_aspx.submit(オブジェクト送信者)
で System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
, EventArgs e) in C:\Documents and Settings\Maira Alvi\My Documents\Visual Studio 2005\WebSites\WebSite3\Registration.aspx:line 32

4

2 に答える 2

1

入力フィールドの 1 つにエスケープされていない文字 (例: ') が含まれていると思います。パラメーター化されたクエリに切り替えると、その問題が解決されるだけでなく、他の問題 (SQL インジェクションなど) に対する防御にも役立ちます。

//change query to use parameters
strSQL = "INSERT INTO tblRecord (CNIC,Names,City,Address,Number) VALUES (?,?,?,?,?);"

...

With objCmd
    .Connection = objConn
    .CommandText = strSQL
    .CommandType = CommandType.Text
    //add parameters using inputs for values
    .Parameters.Add("?", OleDbType.VarChar, 50).Value = cnic.Text; //assumes varchar(50)
    .Parameters.Add("?", OleDbType.VarChar, 50).Value = name.Text; //assumes varchar(50)
    .Parameters.Add("?", OleDbType.VarChar, 50).Value = city.Text; //assumes varchar(50)
    .Parameters.Add("?", OleDbType.VarChar, 50).Value = postal.Text; //assumes varchar(50)
    .Parameters.Add("?", OleDbType.VarChar, 50).Value = phone.Text; //assumes varchar(50)
End With
于 2013-01-09T18:52:19.010 に答える
0

あなたは構文エラーを持っています、それはあなたの例外でそう言っています!SQLInsertステートメント用に作成している文字列を見てください。'どこかで最後に行方不明 があると確信しています。

ただし、基本的には、これはSQLステートメントを作成するための非常に悪い方法です。string.Formatを使用することで改善できますが、それでもSQLインジェクション攻撃を受ける可能性があります。

パラメータを使用して値を追加することをお勧めします。 これを正しく行う方法の例を次に示します。

于 2013-01-09T18:45:04.240 に答える