String 无法将参数值从字符串转换为日期时间(Visual Studio访问数据库)
我正在尝试创建一个VisualStudio程序,每当单击按钮时,该程序将向Access数据库中添加一条新记录。输入到access数据库不同列中的信息基于选中的复选框。我现在得到这个错误: 我最初认为错误源于数据库中错误选择的数据类型,但是我更改了如下所示的类型,仍然存在错误 我迷路了,因为我认为我已经正确地将日期转换为字符串。这是我的代码供参考。谢谢你的帮助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
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改成了短文本;“确实是一个糟糕的举动。”古斯塔夫认为这就是导致错误的原因,我的糟糕。