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

时间:2013-12-31 22:55:14

标签: vb.net ms-access

我在插入语句中添加日期/时间类型参数时遇到问题。对于文本数据,您可以将文本框留空,并添加记录,但是我不能添加日期/时间数据。我收到以下错误:

  

标准表达式中的数据类型不匹配。

我想要添加日期/时间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

1 个答案:

答案 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.TryParseDateTime.TryParseExact,但实施这是对读者的练习。