我在插入语句中添加日期/时间类型参数时遇到问题。对于文本数据,您可以将文本框留空,并添加记录,但是我不能添加日期/时间数据。我收到以下错误:
标准表达式中的数据类型不匹配。
我想要添加日期/时间MaskedTextBox
(__/__/____
),即使它是空的。这是我的代码。
Private Sub btnBookADD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBookADD.Click
Dim sqlinsert As String = "INSERT INTO tblBookIssue([Accession Number],[Book Title],[Student Name],[Years],[Section],[Date Issue],[Date to be Return],[Date Returned]) VALUES ('" & txtBookAccessNumber.Text & "' , '" & txtBookBookTitle.Text & "' , '" & txtBookStudentName.Text & "' , '" & txtBookYears.Text & "' , '" & txtBookSection.Text & "' , '" & txtBookDateIssue.Text & "' , '" & txtBookDatetobeReturn.Text & "' , '" & txtBookDateReturned.Text & "')"
Dim cmd As New OleDbCommand(sqlinsert, con)
cmd.Parameters.Add(New OleDbParameter("@Accession_Number", txtBookAccessNumber.Text))
cmd.Parameters.Add(New OleDbParameter("@Book_Title", txtBookBookTitle.Text))
cmd.Parameters.Add(New OleDbParameter("@Student_Name", txtBookStudentName.Text))
cmd.Parameters.Add(New OleDbParameter("@Years", txtBookYears.Text))
cmd.Parameters.Add(New OleDbParameter("@Section", txtBookSection.Text))
cmd.Parameters.Add(New OleDbParameter("@Date_Issue", txtBookDateIssue.Text))
cmd.Parameters.Add(New OleDbParameter("@Date_to_be_Return", txtBookDatetobeReturn.Text))
cmd.Parameters.Add(New OleDbParameter("@Date_Returned", txtBookDateReturned.Text))
con.Open()
cmd.ExecuteNonQuery()
con.Close()
MsgBox("One Record Added")
RefreshDataGridview3()
End Sub
答案 0 :(得分:0)
您将文本框的.Text
属性直接存储到数据库中,但这不起作用。 .Text
属性为String
s(即简单文本),而不是DateTime
个实例。先进行转换,然后再进行转换。
对每个日期参数执行此操作:
Dim bookIssueDate As DateTime = DateTime.ParseExact( txtBookDateIssue.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture )
cmd.Parameters.Add( New OleDbParameter("@Date_Issue", bookIssueDate ) )
请注意,如果用户输入无效日期,此代码将崩溃/失败,例如“64/48/9999”,我建议使用DateTime.TryParse
或DateTime.TryParseExact
,但实施这是对读者的练习。