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

时间:2015-09-28 13:17:16

标签: c#

我对此声明有疑问我正在尝试根据日期从表中检索数据,但它一直告诉我数据类型不匹配

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;

1 个答案:

答案 0 :(得分:0)

使用参数来防止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 );
    }
}

请注意

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