【问题标题】:How to insert a date into SQL Server using vb.net如何使用 vb.net 将日期插入 SQL Server
【发布时间】:2016-12-29 04:44:40
【问题描述】:

这是我的代码,它会先将数据插入 datagridview,然后再插入数据库。

当我运行代码时,我得到了错误

操作数类型冲突位与日期不兼容

谁能帮帮我?

提前致谢

    populate(txtRejectID.Text, comboBoxCardType.Text, txtEmbossName.Text, txt6CardNum.Text, txt4CardNum.Text, txtQuantity.Text, comboBoxErrorDesc.Text, embossDate.Text, txtStatus.Text)

    For Each row As DataGridViewRow In DataGridView1.Rows
            Dim query As String = "INSERT INTO dbo.RejectCard VALUES (@RejectID, @Card_Type, @Emboss_Name, @Card_Number, @Quantity, @Error_Description, @Emboss_Date, @Status)"

        Using conn As New SqlConnection(connString)
            Using cmd As New SqlCommand(query, conn)

                cmd.Parameters.AddWithValue("@RejectID", row.Cells("rejectid").Value)
                cmd.Parameters.AddWithValue("@Card_Type", row.Cells("cardtype").Value)
                cmd.Parameters.AddWithValue("@Emboss_Name", row.Cells("embossname").Value)
                cmd.Parameters.AddWithValue("@Card_Number", row.Cells("cardnumber").Value)
                cmd.Parameters.AddWithValue("@Quantity", row.Cells("quantity").Value)
                cmd.Parameters.AddWithValue("@Error_Description", row.Cells("errordescription").Value)
                cmd.Parameters.AddWithValue("@Emboss_Date", row.Cells("emboss_Date").Value = embossDate.Value.Date.ToString("dd/MM/yyyy"))
                cmd.Parameters.AddWithValue("@Status", row.Cells("status").Value)

                Try
                    conn.Open()
                    cmd.Connection = conn
                    cmd.ExecuteNonQuery()

                Catch ex As Exception
                    MessageBox.Show("Error while inserting record on table..." & ex.Message, "Insert Records")
                Finally
                    conn.Close()
                End Try
            End Using
        End Using
    Next

    MessageBox.Show("Records inserted.")
End Sub

【问题讨论】:

  • 请在插入中提及列列表,其中引用的值列表与值的顺序相同。这是最好的做法......
  • 那里有很多错误,我正在努力找出从哪里开始。为什么要为每条记录创建一个新连接?您甚至不应该为每条记录创建一个新命令。如果您决定拨打ExecuteNonQuery,那么您应该创建一个连接和一个命令,添加所有参数,打开连接,然后开始循环。在循环中,您设置每个参数的Value,然后调用然后执行。更好的是,只需创建一个 DataTable 并将其绑定到网格,然后通过一个 Update 调用保存该批次。
  • 感谢您的评论。我从这里和那里参考我的编码,然后在我的项目中实现它。我将提高我的编码技能。谢谢

标签: sql-server vb.net datetime


【解决方案1】:

您插入日期的方式与插入其他任何内容的方式完全相同。问题是您没有插入Date。您正在插入 Boolean。看看你的代码。这是您插入的值:

row.Cells("emboss_Date").Value = embossDate.Value.Date.ToString("dd/MM/yyyy")

这是一个相等的比较。相等比较的结果始终是Boolean,即如果值相等则为True,否则为False。如果要插入 Date,则提供 Date,而不是网格行中的值与 String 之间的比较。

为什么你不只是为那个参数做你为所有其他人做的事情?你显然认为你在那里取得了一些成就,但我可以向你保证,你没有。如果您想要做的是从您的 DateTime 值中删除时间,那么您可以通过获取 Date 属性来做到这一点,而不是将 Date 转换为 String

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多