Sql插入查询未插入
Posted
技术标签:
【中文标题】Sql插入查询未插入【英文标题】:Sql insert query not inserting 【发布时间】:2013-12-26 19:57:43 【问题描述】:我无法让我的 sql 查询将数据插入到访问数据库中。如果我在访问的 sql 视图中运行查询,它会很好地插入,所以我猜这会在我的代码中留下错误。我确信我犯了一个根本性错误,如果有人能指出这一点,我将不胜感激。谢谢
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
Try
DBConnection.connect()
sql = "SELECT MAX([Request no]) from Requests WHERE Customer = '" & cmbCustomer.Text & "' "
Dim cmd As New OleDb.OleDbCommand
Dim id As String
Dim requestor As String = "BT"
Dim intake As String = "I"
Dim status As String = "O"
'cmd.Parameters.AddWithValue("@p1", cmbCustomer.Text)
cmd.CommandText = sql
cmd.Connection = oledbCnn
dr = cmd.ExecuteReader
While dr.Read()
id = CStr(dr.Item(0))
id = CStr(CDbl(id) + 1)
End While
sql = "INSERT INTO Requests ([Request no], Customer, Dept, Type, [Service level], [Date-time received], [Received by], [Date-time due], Quantity, [Cust requestor], Status ) " &
"VALUES ('" & id & "', '" & cmbCustomer.Text.ToUpper & "', '" & cmbDept.Text & "', '" & intake.ToString & "', '" & rbServiceLevel.ToString & "', NOW(), '" & requestor.ToString & "', '" & dtpDateDue.Value & "', '" & txtBoxQuantity.Text & "', '" & requestor.ToString & "', '" & status & "')"
cmd.Dispose()
dr.Close()
oledbCnn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
数据库连接
Imports System.Data.OleDb
Module DBConnection
Public connetionString As String = My.Settings.storageConnectionString
Public oledbCnn As New OleDbConnection
Public oledbCmd As OleDbCommand
Public dr As OleDbDataReader
Public sql As String
Sub connect()
'connetionString = My.Settings.storageConnectionString
oledbCnn.ConnectionString = connetionString
oledbCnn.Open()
End Sub
End Module
【问题讨论】:
您没有执行 INSERT 查询,只是构建它 如何修改我的代码 Yuriy。谢谢 你必须学会如何使用参数来避免SQL注入。 @user1532468 看我的回答 【参考方案1】:您的问题是您正在构建 SQL 查询,但并未实际执行它。 试试这个:
End While
dr.Close()
sql = "INSERT INTO Requests ([Request no], Customer, Dept, Type, [Service level], [Date-time received], [Received by], [Date-time due], Quantity, [Cust requestor], Status ) " & _
"VALUES ('" & id & "', '" & cmbCustomer.Text.ToUpper & "', '" & cmbDept.Text & "', '" & intake.ToString & "', '" & rbServiceLevel.ToString & "', NOW(), '" & requestor.ToString & "', '" & dtpDateDue.Value & "', '" & txtBoxQuantity.Text & "', '" & requestor.ToString & "', '" & status & "')"
cmd.CommandText = sql
cmd.ExecuteNonQuery()
cmd.Dispose()
oledbCnn.Close()
Catch ex As Exception
但是听听@LarsTech - 在构建 SQL 命令时寻找parametrized query 而不是字符串连接,否则你要为 SQL 注入负责(有人可以在文本框中欺骗数据并导致数据丢失)
旁注:如果您要从 DB 中检索单个值 - 而不是 ExecuteReader
查找 ExecuteScalar。
【讨论】:
Yuriy 错误:没有为命令对象设置命令文本。 请在执行cmd.ExecuteNonQuery()
之前验证 cmd.CommandText
的值是什么 - 确保它是有效的 INSERT 命令
如果您按原样从cmd.CommandText
获取该文本并将其复制/粘贴到 Access 中 - 它执行时不会出错吗?
作为事后的想法 - Type
是 Acccess 中的保留字 - 将其用作插入字段尝试 [Type]
我已经修改了它,但它仍然拒绝插入 access 或 vb.net。我检查并重新检查,没有空文件,允许零长度,访问时不需要字段。以上是关于Sql插入查询未插入的主要内容,如果未能解决你的问题,请参考以下文章
Pyodbc 未检测 SQL 语句中的参数标记(即 - 插入表 SELECT ...)到 Hive 表。这个问题有解决方法吗?
Sql 语句:在要插入的字段中未指定主键时,插入键更新未按预期工作
Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试