String 无法将参数值从字符串转换为日期时间(Visual Studio访问数据库)

String 无法将参数值从字符串转换为日期时间(Visual Studio访问数据库),string,vb.net,visual-studio,datetime,ms-access,String,Vb.net,Visual Studio,Datetime,Ms Access,我正在尝试创建一个VisualStudio程序,每当单击按钮时,该程序将向Access数据库中添加一条新记录。输入到access数据库不同列中的信息基于选中的复选框。我现在得到这个错误: 我最初认为错误源于数据库中错误选择的数据类型,但是我更改了如下所示的类型,仍然存在错误 我迷路了,因为我认为我已经正确地将日期转换为字符串。这是我的代码供参考。谢谢你的帮助 Private Sub InputInformation(sender As System.Object, e As System.E

我正在尝试创建一个VisualStudio程序,每当单击按钮时,该程序将向Access数据库中添加一条新记录。输入到access数据库不同列中的信息基于选中的复选框。我现在得到这个错误:

我最初认为错误源于数据库中错误选择的数据类型,但是我更改了如下所示的类型,仍然存在错误

我迷路了,因为我认为我已经正确地将日期转换为字符串。这是我的代码供参考。谢谢你的帮助

Private Sub InputInformation(sender As System.Object, e As System.EventArgs) Handles ImporttBUT.Click

        Dim strSql = "Insert Into [DataCollection] (
           
            [M/Y Of LOG],
            [TIME OF LOG],
            [USER],
            [STOCK NUMBER],
            [MISSED PART],
            [NOT IN EPICOR],
            [MISSED BUYOUT],
            [MISSED NON STOCK ITEM],
            [MISSED STOCK ITEM],
            [MISSED AUTOMATED],
            [MISSING PRINTS AFTER QUANTITY],
            [MISSED PRINT NOT SENT TO CHAD],
            OTHER,
            [ADDED MISSING DIMENSION],
            [FIXED DIMENSION]
            )
            Values ( @M_YLog, @TimeLog, @User, @StockNumber, @MissedPart, @NotEpicor, MissedBuyout, @MissedNonStock, @MissedStock, @MissedAutomated, @MissedPrints, @NotSent, @Other, @MissingDimension, @FixedDimension);"

        Using con As New OleDb.OleDbConnection(My.Settings.Database1ConnectionString),
            cmdSQL As New OleDbCommand(strSql, con)

            With cmdSQL.Parameters

                .Add("@M_YLog", OleDbType.VarChar, 100).Value = Me.MonthList2021.SelectedItem
                .Add("@TimeLog", OleDbType.VarChar, 100).Value = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss")
                .Add("@User", OleDbType.VarChar, 100).Value = UserName
                .Add("@StockNumber", OleDbType.Date, 100).Value = ""
                .Add("@MissedPart", OleDbType.VarChar, 100)
                If MissedPartCHKB.Checked Then
                    cmdSQL.Parameters("@MissedPart").Value = MissedPartCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedPart").Value = "NEATOL"
                End If
                .Add("@NotEpicor", OleDbType.VarChar, 100)
                If NotInEpicorCHKB.Checked Then
                    cmdSQL.Parameters("@NotEpicor").Value = NotInEpicorCHKB.Text
                Else
                    cmdSQL.Parameters("@NotEpicor").Value = "NEATOL"
                End If
                .Add("@MissedBuyout", OleDbType.VarChar, 100)
                If MissedBuyoutCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedBuyout").Value = MissedBuyoutCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedBuyout").Value = "NEATOL"
                End If
                .Add("@MissedNonStock", OleDbType.VarChar, 100)
                If NonStockCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedNonStock").Value = NonStockCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedNonStock").Value = "NEATOL"
                End If
                .Add("@MissedStock", OleDbType.VarChar, 100)
                If MissedSTKItemCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedStock").Value = MissedSTKItemCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedStock").Value = "NEATOL"
                End If
                .Add("@MissedAutomated", OleDbType.VarChar, 100)
                If MissedAutomatedPartCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedAutomated").Value = MissedAutomatedPartCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedAutomated").Value = "NEATOL"
                End If
                .Add("@MissedPrints", OleDbType.VarChar, 100)
                If MissingPrintAfterQTYCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissedPrints").Value = MissingPrintAfterQTYCHKB.Text
                Else
                    cmdSQL.Parameters("@MissedPrints").Value = "NEATOL"
                End If
                .Add("@NotSent", OleDbType.VarChar, 100)
                If MissedPrintsNOTSentChadCHKB.Checked = True Then
                    cmdSQL.Parameters("@NotSent").Value = MissedPrintsNOTSentChadCHKB.Text
                Else
                    cmdSQL.Parameters("@NotSent").Value = "NEATOL"
                End If
                .Add("@Other", OleDbType.VarChar, 100)
                If OtherCHKB.Checked = True Then
                    cmdSQL.Parameters("@Other").Value = OtherTXTB.Text
                Else
                    cmdSQL.Parameters("@Other").Value = "NEATOL"
                End If
                .Add("@MissingDimension", OleDbType.VarChar, 100)
                If AddedMissingDimCHKB.Checked = True Then
                    cmdSQL.Parameters("@MissingDimension").Value = AddedMissingDimCHKB.Text
                Else
                    cmdSQL.Parameters("@MissingDimension").Value = "NEATOL"
                End If
                .Add("@FixedDimension", OleDbType.VarChar, 100)
                If FixedDimensionCHKB.Checked = True Then
                    cmdSQL.Parameters("@FixedDimension").Value = FixedDimensionCHKB.Text
                Else
                    cmdSQL.Parameters("@FixedDimension").Value = "NEATOL"
                End If
            End With
            con.Open()
            cmdSQL.ExecuteNonQuery()
        End Using
        ResetControls()
    End Sub
    Private Sub ResetControls()
        Dim lstChkBx As New List(Of CheckBox) From {MissedPartCHKB, MissedAutomatedPartCHKB, NotInEpicorCHKB, NonStockCHKB, MissedSTKItemCHKB, MissedBuyoutCHKB, MissedPrintsNOTSentChadCHKB, MissingPrintAfterQTYCHKB, AddedMissingDimCHKB, FixedDimensionCHKB, OtherCHKB}
        For Each chk As CheckBox In lstChkBx
            chk.Checked = False
        Next
        OtherTXTB.Text = ""
        ' eventually change the month list to automatically select based on the current date
        'If this is a ListBox
        MonthList2021.SelectedIndex = -1
    End Sub

谢谢你的帮助

您应该始终将日期和时间存储为DateTime,而不是文本或其他任何形式,没有例外

因此,请将数据类型更改为DateTime并尝试:

.Add("@TimeLog", OleDbType.Date).Value = DateTime.Now

您应该始终将日期和时间存储为DateTime,而不是文本或其他任何形式,没有例外

因此,请将数据类型更改为DateTime并尝试:

.Add("@TimeLog", OleDbType.Date).Value = DateTime.Now

这里发生的事情:“.Add(“@StockNumber”,OleDbType.Date,100).Value=”“@AndrewMortimer好吧,最终文本将从一个开放程序自动填充,但我还没有设置,所以暂时是空白的。我还将.Date更改为.varchar这里发生的事情:“.Add(@StockNumber”,OleDbType.Date,100).Value=”“”@AndrewMortimer嗯,最终文本将从一个开放程序中自动填充,但我还没有设置,所以它暂时是空白的。我还将.date更改为.varchar。您认为值得明确提及的是表上的数据类型需要更改吗?我想是的。提问者似乎把它从DateTime改成了短文本;“这的确是一个错误的举动。@古斯塔夫认为这就是导致错误的原因,我的错误。您认为值得明确提及的是,表上的数据类型需要更改吗?我想是的。提问者似乎把它从DateTime改成了短文本;“确实是一个糟糕的举动。”古斯塔夫认为这就是导致错误的原因,我的糟糕。