我对此声明有疑问我正在尝试根据日期从表中检索数据,但它一直告诉我数据类型不匹配
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;
答案 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.InvariantInfo
或CultureInfo.InvariantCulture
代替null
作为ParseExact
的参数,因为null
已替换为当前文化。如果不使用/
作为日期分隔符TryParseExact
无法解析此字符串(假设textBox1.Text
类似于28/09/2015
)