“条件表达式中的数据类型不匹配”错误将日期插入 Access 数据库中的日期/时间字段

Posted

技术标签:

【中文标题】“条件表达式中的数据类型不匹配”错误将日期插入 Access 数据库中的日期/时间字段【英文标题】:"Data type mismatch in criteria expression" error inserting Dates into Date/Time Field in Access database 【发布时间】:2013-04-10 15:30:28 【问题描述】:

我正在使用日历扩展器在 Visual Studio 2010 内部的 ASP.NET 中扩展一个文本框。我正在尝试将事件的日期与其他信息一起插入到数据库中。我在尝试插入数据库时​​收到“标准表达式中的数据类型不匹配”错误。

我尝试使用 DateTime.ParseExact 将字符串日期转换为访问日期/时间,但仍然没有成功。

这是我的代码:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim oleDbConn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
    Dim SqlString As String = "Insert into Events(EventTitle,EventDescription,EventDate,EventCategory) Values (@f1,@f2,@f3,@f4)"
    Dim cmd As OleDbCommand = New OleDbCommand(SqlString, oleDbConn)

    cmd.CommandType = CommandType.Text
    cmd.Parameters.AddWithValue("@f1", tb_eventtitle.Text)
    cmd.Parameters.AddWithValue("@f2", tb_eventdescription.Text)
    cmd.Parameters.AddWithValue("@f3", DateTime.ParseExact(tb_eventdate.Text, "dd/MM/yyyy",
    CultureInfo.InvariantCulture))
    cmd.Parameters.AddWithValue("@f4", dd_eventcategory.SelectedValue)
    oleDbConn.Open()
    cmd.ExecuteNonQuery()
    System.Threading.Thread.Sleep("2000")
    Response.Redirect("~/calendar.aspx")
End Sub

这是我的 ASP.NET 代码(请注意,我还将 CalendarExtender 插入文本框中的日期格式化为“dd/MM/yyyy”):

 <asp:TextBox ID="tb_eventdate" runat="server" ToolTip="Enter a
 date"></asp:TextBox>
                <ajaxToolkit:CalendarExtender ID="tb_eventdate_CalendarExtender"  Format="dd/MM/yyyy" runat="server"

                    TargetControlID="tb_eventdate">
                </ajaxToolkit:CalendarExtender>

我的 Access 数据库中的字段类型为“日期/时间”。

我不知道为什么会遇到这个问题,因为我设法在另一个函数中从数据库中检索日期并将它们转换为 ToString:

    Function GetEventListing(selectedDay As DateTime) As DataTable
    '--read event listing for the given day from an Access query
    Dim con As OleDbConnection = GetConnection()
    Dim cmd As OleDbCommand = New OleDbCommand()
    cmd.Connection = con
    cmd.CommandText = String.Format("Select * from EventInfo Where EventDate >= #0# And EventDate < #1#", _
                                    selectedDay.ToString("dd/MM/yyyy"), _
                                    selectedDay.AddDays(1).ToString("dd/MM/yyyy"))
    Dim ds As DataSet = New DataSet()
    Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
    da.Fill(ds)
    con.Close()

    Return ds.Tables(0)
End Function

我收到错误的原因可能是什么?

【问题讨论】:

我认为访问数据库将“-”作为分隔符。但不确定。 检查您的区域设置以获取正确的日期格式 @George 我在哪里可以找到我的区域设置? 【参考方案1】:

也许不是日期搞砸了你。我想也许你得到了错误,因为你添加了一个 DateTime 值作为参数(而不是转换为格式为 yyyy-mm-ddm/d/yyyy 的字符串的日期),但我在 C# 中尝试了以下内容并且它有效很好……

static void Main(string[] args)

    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Administrator\Desktop\Database1.accdb;");
    conn.Open();
    OleDbCommand cmd = new OleDbCommand("INSERT INTO Events (EventName, EventDate) VALUES (?, ?)", conn);
    cmd.Parameters.AddWithValue("?", "TestEvent");
    cmd.Parameters.AddWithValue("?", (new DateTime(2013,3,21)));
    cmd.ExecuteNonQuery();
    conn.Close();

    Console.WriteLine("Done.");

...所以如果您的 DateTime 解析返回一个有效的 DateTime 值,那么看起来您的查询应该有效。

如果确实是 SQL 语句的执行失败了,那么唯一可能的另一个嫌疑人是dd_eventcategory.SelectedValue。也许那需要.ToString()'d...?

【讨论】:

我刚刚在 Button Click 处理程序中实现了您上面的代码,并且成功了!我想你一定是对的!非常感谢!

以上是关于“条件表达式中的数据类型不匹配”错误将日期插入 Access 数据库中的日期/时间字段的主要内容,如果未能解决你的问题,请参考以下文章

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

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

将日期时间插入数据库

插入记录时“条件表达式中的数据类型不匹配”

错误“条件表达式中的数据类型不匹配”

ms 访问 2007 更新错误运行时错误 3464,条件表达式中的数据类型不匹配