我的代码如下:
我正在使用:
date=datatype=date;
time=datatype=time;
private void button8_Click(object sender, EventArgs e)
{
//cmd = new SqlCommand("select * from Client_Attendence where date='" +dateTimePicker1.Value + "'", con);
DateTime dt1= Convert.ToDateTime((dateTimePicker1.Value));
DateTime dt2 = Convert.ToDateTime((dateTimePicker3.Value));
SqlDataAdapter sdf = new SqlDataAdapter("select * from Client_Attendence where date between '" + dt1+ "'and '"+dt2+"'", con);
DataTable sd = new DataTable();
sdf.Fill(sd);
dataGridView1.DataSource = sd;
//dataGridView1.Columns["balance"].DefaultCellStyle.BackColor = Color.Yellow;
//dataGridView1.Columns["enddate"].DefaultCellStyle.BackColor = Color.Red;
}
首先将日期时间转换为字符串可能会有所帮助
dt1.ToShortDateString()
dt2.ToShortDateString()
您需要将DateTime
值转换为String
,
DateTime dt1= Convert.ToDateTime(dateTimePicker1.Value.ToString());
DateTime dt2 = Convert.ToDateTime(dateTimePicker3.Value.ToString());
考虑到您的以下查询,我必须在这里建议几件事:
SqlDataAdapter sdf = new SqlDataAdapter("select * from Client_Attendence where date between '" + dt1+ "'and '"+dt2+"'", con);
上述查询中需要的修复:
- 使用
[date]
而不是date
- 在
and
之前你需要一个空格。
建议
- 在 sql 中使用
SqlParameters
而不是日期的字符串连接。 - 将参数添加到
SqlCommand
并将其传递给SqlDataAdapter
。
建议 1 将避免 SQL 注入攻击。
如何实现2?使用MSDN 中的此链接
如果您发布的代码是复制/粘贴,则 dt1 和单词"AND"之间没有空格。
"select * from Client_Attendence where date between '" + dt1+ "'and '"+dt2+"'"
需要
"select * from Client_Attendence where date between '" + dt1+ "' and '"+dt2+"'"
还要仔细检查日期时间对象的格式。 根据它们在字符串中的表示方式,您可能需要像这样定义 Convert 函数:
DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture)
将变量替换为实际日期和时间,并更改 yyy-MM-dd 格式以匹配输入的格式。