关于我在代码中遇到的异常,我需要解决方案
Posted
技术标签:
【中文标题】关于我在代码中遇到的异常,我需要解决方案【英文标题】:I need solution for this, regarding the exception which I get in my code 【发布时间】:2013-01-09 18:34:59 【问题描述】:这是我尝试将数据插入数据库的一段代码。我没有收到任何语法错误,但它没有提交数据。
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 行为,对象和执行结果) 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法) 在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery() 在 C:\Documents and Settings\Maira Alvi\My Documents\Visual Studio 2005\WebSites\WebSite3\Registration.aspx:line 32 中的 ASP.registration_aspx.submit(Object sender, EventArgs e)
【问题讨论】:
直接在 SQL Management Studio 中运行 SQL 会发生什么?Syntax error in INSERT INTO statement.
。在执行之前检查strSQL
的值。你确实有语法错误。
顺便说一句 - 此代码对 SQL Injection 开放。您应该使用parameterized queries,这也可能会纠正您遇到的问题。
想想如果您的输入之一包含'
...
【参考方案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
【讨论】:
【参考方案2】:您确实有语法错误,它在您的异常中说得对!查看您正在为 SQL Insert 语句构建的字符串。我很确定最后某处缺少'
。
但基本上,这是构建 SQL 语句的一种非常糟糕的方式。可以通过使用 string.Format 来改进它,但即便如此,您也会面临 SQL 注入攻击。
使用参数添加值要好得多。 Here's an example of how to do it right.
【讨论】:
InsertINSERT INTO tblRecord (CNIC,Names,City,Address,Number) VALUES ('31201-1234567-9','jj','hjkhj','hjhkj','12345678910') 这是strSQL的值 电话字段的大小是多少?看起来您要插入 11 个字符...大多数电话号码是 10 位数字,所以您可能会溢出该列。以上是关于关于我在代码中遇到的异常,我需要解决方案的主要内容,如果未能解决你的问题,请参考以下文章
我在 Selenium 中使用 chrome 浏览器启动 facebook 时遇到以下异常,任何人都可以建议我解决这个问题
Selenium WebDriver 如何解决陈旧元素引用异常?