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。 OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
at ASP.registration_aspx.submit(Object sender , EventArgs e) 在 C:\Documents and Settings\Maira Alvi\My Documents\Visual Studio 2005\WebSites\WebSite3\Registration.aspx:line 32

4

2 回答 2

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

您确实有语法错误,它在您的异常中说得对!查看您正在为 SQL Insert 语句构建的字符串。我很确定'最后某处有遗漏。

但基本上,这是构建 SQL 语句的一种非常糟糕的方式。可以通过使用 string.Format 来改进它,但即便如此,您也会对 SQL 注入攻击持开放态度。

使用参数添加值要好得多。 这是如何正确执行此操作的示例。

于 2013-01-09T18:45:04.240 回答