Vb.net 如何从空MaskedTextBox获取日期/时间列的参数值

Vb.net 如何从空MaskedTextBox获取日期/时间列的参数值,vb.net,ms-access,Vb.net,Ms Access,向insert语句添加日期/时间类型的参数时遇到问题。对于文本数据,您可以将文本框留空,记录将被添加,但对于日期/时间数据,我无法添加。我得到以下错误: 条件表达式中的数据类型不匹配 我希望添加我的日期/时间掩码文本框(\uuuuu/\uuuuuu/\uuuuuuuuu//code>),即使它是空的。这是我的密码 Private Sub btnBookADD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Han

向insert语句添加日期/时间类型的参数时遇到问题。对于文本数据,您可以将文本框留空,记录将被添加,但对于日期/时间数据,我无法添加。我得到以下错误:

条件表达式中的数据类型不匹配

我希望添加我的日期/时间
掩码文本框
\uuuuu/\uuuuuu/\uuuuuuuuu//code>),即使它是空的。这是我的密码

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

您将文本框的
.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
,但实现这一点是读者的练习。

谢谢您的快速回复,但您能否将您的代码翻译成vb.net 2008 bcoz它是我的当前版本。谢谢,先生!您也可以考虑使用<代码> DateTimePicker < /Cult>控件。哪个控件是您的代码> MaskdTrimeBox < /代码>?另外,该列在Access中是否可以为空?