【发布时间】:2018-07-18 09:24:46
【问题描述】:
应用程序的目的是从Sql 数据库中选择数据到windows 窗体数据网格。我为日期时间选择器实现了自定义格式,但仍然收到此错误。这是应用程序的属性和以下代码
private void startTimePicker1_MouseDown(object sender, MouseEventArgs e)
{
startTimePicker1.CustomFormat = "yyyy-MM-dd hh:mm:ss";
startTimePicker1.Format = DateTimePickerFormat.Custom;
}
private void endTimePicker1_MouseDown(object sender, MouseEventArgs e)
{
endTimePicker1.CustomFormat = "yyyy-MM-dd hh:mm:ss";
endTimePicker1.Format = DateTimePickerFormat.Custom;
}
private void loadBtn_Click(object sender, EventArgs e)
{
startTimePicker1.CustomFormat = "yyyy-MM-dd hh:mm:ss";
startTimePicker1.Format = DateTimePickerFormat.Custom;
endTimePicker1.CustomFormat = "yyyy-MM-dd hh:mm:ss";
endTimePicker1.Format = DateTimePickerFormat.Custom;
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DBName"].ConnectionString))
{
if(db.State==ConnectionState.Closed)
{
db.Open();
string query = "select z.ItemName, x.Quantity, x.CreateDate" +
" from Invoice_Itemized x inner join Inventory z on x.ItemNum = z.ItemNum inner join Departments d on z.Dept_ID = d.Dept_ID" +
$"where x.CreateDate BETWEEN '{ startTimePicker1 }' and '{ endTimePicker1 }' and d.SubType = 'TYPE'";
liquorBindingSource.DataSource = db.Query<Liquor>(query, commandType: CommandType.Text);
}
}
查询在运行时输出以下值
select z.ItemName, x.Quantity, x.CreateDate from Invoice_Itemized x inner join Inventory z on x.ItemNum = z.ItemNum inner join Departments d on z.Dept_ID = d.Dept_IDwhere x.CreateDate BETWEEN 'System.Windows.Forms.DateTimePicker, Value: 7/18/2018 2:44:00 AM' and 'System.Windows.Forms.DateTimePicker, Value: 7/18/2018 4:19:01 AM' and d.SubType = 'TYPE'
这个查询在 SSMS 中成功执行,经过几个小时的调试,我遇到了巨大的障碍。
【问题讨论】:
-
使用 SQL 变量,不要字符串化你的日期
-
on z.Dept_ID = d.Dept_IDwhere x.CreateDate和'System.Windows.Forms.DateTimePicker, Value: 7/18/2018 2:44:00 AM'缺少空格不是有效的 SQL 日期 -
您也可以删除您的
if测试。除了通过调用IDbConnection db = new SqlConnection(...关闭连接之外,您收到其他内容的可能性为0。