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 语句:在要插入的字段中未指定主键时,插入键更新未按预期工作

SQL Server 2014 在未插入的地方插入

Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试

MySQL 插入查询中提到的 Java Array 元素未插入到表中。而是抛出错误

SQL 输出子句是不是可以返回未插入的列?