like
之间日期的正确语法是什么?这是我的示例代码。我在查询中遇到错误
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
MySqlDataAdapter sda = new MySqlDataAdapter(
"SELECT `empID`, `Name`, `Date`, `empIn`, `empOut`, `workhours`, `workhoursTotal`, `workhoursLate`, `workhoursLateTotal`, `overtime`, `minuteOvertime`, `Reason`, `undertime`, `undertimeTotalMin`, `status`, `Payslip` FROM `attendance`"
+ " WHERE Date BETWEEN LIKE '"
+ dateTimePicker1.Value.ToString("yyyy-MM-dd")
+ "%' AND Date LIKE'" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "%'", con);
DataTable data = new DataTable();
sda.Fill(data);
dataGridView1.DataSource = data;
}
答案 0 :(得分:1)
如果要将DateTime值转换为用于SQL的字符串,则表示正在执行非常错误。使用参数化查询使ADO.Net可以为您处理此问题。另外,这可以保护您免受SQL Injection攻击,并且通常也会表现更好。
此外,将LIKE
与BETWEEN
一起使用完全没有意义。因此,BETWEEN
本身在日期比较中通常是较差的做法,因为它包含范围的两端。更好的做法是将日期>=
与日期范围的起始位置进行比较,并将日期{em>第二天的第一时刻<
(无=
)进行比较在范围的末尾。
您似乎还想在整个应用程序或表单中重复使用相同的连接对象。 请勿这样做。 ADO.Net具有一个称为连接池的功能,它将以更有效的方式为您处理此问题。您确实确实想为大多数查询创建一个新的连接对象。
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
var result = new DataTable();
string sql = @"
SELECT `empID`, `Name`, `Date`, `empIn`, `empOut`, `workhours`, `workhoursTotal`,
`workhoursLate`, `workhoursLateTotal`, `overtime`, `minuteOvertime`, `Reason`,
`undertime`, `undertimeTotalMin`, `status`, `Payslip`
FROM `attendance`
WHERE `Date` > @StartDate AND `Date` <= @EndDate";
using (var con = new MySqlConnection("connection string here"))
using (var cmd = new MySqlCommand(sql, con))
using (var sda = new MySqlDataAdapter(cmd))
{
cmd.Parameters.Add("@StartDate", MySqlDbType.DateTime).Value = dateTimePicker1.Value.Date;
cmd.Parameters.Add("@StartDate", MySqlDbType.DateTime).Value = dateTimePicker2.Value.Date.AddDays(1);
sda.Fill(result);
}
dataGridView1.DataSource = result;
}
答案 1 :(得分:0)
首先,您确定您的dateTimePicker具有信息吗?将值直接发送到数据库不是一个好习惯。 其次,代码有很多错误:
MySqlDataAdapter sda = new MySqlDataAdapter("SELECTempID,Name,Date,empIn,empOut,workhours,workhoursTotal,workhoursLate,workhoursLateTotal,overtime,minuteOvertime,Reason,undertime,undertimeTotalMin,status,PayslipFROMattendance` WHERE Date BETWEEN LIKE '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "%' AND Date LIKE'" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "%'", con);
在SELECT之后,FROM之前和之后,最后一个Like中缺少空格,请检查您在MySQL中的代码,然后将其复制到c#中。应该看起来像这样:
MySqlDataAdapter sda = new MySqlDataAdapter("SELECT empID, Name, Date, empIn, empOut, workhours, workhoursTotal, workhoursLate, workhoursLateTotal, overtime, minuteOvertime, Reason, undertime, undertimeTotalMin, status, Payslip
FROM Mattendance WHERE Date BETWEEN '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "' AND '" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "' ", con);
可能还有更多的语法错误,但您可以自己检查一下。
在日期时间中使用“赞”没有第三种含义,因此只需使用BETWEEN。
最后在日期时间使用它以避免格式问题。
dateTimePicker1.Value.ToString(CultureInfo.InvariantCulture)