日期时间数据类型不匹配访问

本文关键字:访问 不匹配 数据类型 时间 日期 | 更新日期: 2023-09-27 18:14:47

我有这个语句的问题,我试图从表中检索数据基于日期,但它一直告诉我有一个数据类型不匹配

DateTime dt = DateTime.ParseExact(textBox1.Text, "dd/mm/yyyy", null);
            OleDbCommand cmd2 = new OleDbCommand("select name from Items where exp_dat='" + dt + "'", con);
            System.Data.DataTable dt4 = new System.Data.DataTable();
            OleDbDataAdapter Adapter4 = new OleDbDataAdapter(cmd2);
            Adapter4.Fill(dt4);
            dataGridView1.DataSource = dt4;

日期时间数据类型不匹配访问

使用参数来防止sql注入和转换/本地化问题:

var dt4 = new System.Data.DataTable();
using(var da = new OleDbDataAdapter("select name from Items where exp_dat=@exp_dat", con))
{
    DateTime dt;
    if(DateTime.TryParseExact(textBox1.Text, "dd/mm/yyyy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt))
    {
        da.SelectCommand.Parameters.Add("@exp_dat", OleDbType.Date).Value = dt;
        da.Fill( dt4 );
    }
}

注意

  • OlebDataAdapter.Fill(table)
  • 不需要con.Open/con.Close
  • 您应该始终对可处置的对象使用using -语句(实现IDisposable),这确保所有非托管资源被处置,即使在出现错误的情况下
  • 您应该使用DateTimeFormatInfo.InvariantInfoCultureInfo.InvariantCulture而不是null作为ParseExact的参数,因为null被当前区域性替换。如果不使用/作为日期分隔符,TryParseExact无法解析该字符串(假设textBox1.Text类似于28/09/2015)