希望这应该是一个简单的方法。在Windows窗体中使用日期时间选择器时,我希望执行SQL语句,如下所示:
string sql = "SELECT * FROM Jobs WHERE JobDate = '" + dtpJobDate.Text + "'";
不幸的是,这实际上没有提供任何结果,因为JobDate字段存储为DateTime值。我希望能够搜索该日期的所有记录,无论存储时间是多少,有什么帮助吗?
新查询:
SqlDataAdapter da2 = new SqlDataAdapter(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SELECT * FROM Jobs WHERE JobDate >= @p_StartDate AND JobDate < @p_EndDate"; cmd.Parameters.Add ("@p_StartDate", SqlDbType.DateTime).Value = dtpJobDate.Value.Date; cmd.Parameters.Add ("@p_EndDate", SqlDbType.DateTime).Value = dtpJobDate.Value.Date.AddDays(1); cmd.Connection = conn; da2.SelectCommand = cmd; da2.Fill(dt); dgvJobDiary.DataSource = dt;
非常感谢您的所有帮助!
仅有一个答案:使用参数化查询。
这是由于不同的原因:
因此,这样编写您的语句:
SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SELECT * FROM Jobs WHERE JobDate = @p_Date" cmd.Parameters.Add ("@p_Date", SqlDbType.DateTime).Value = dtpJobDate.Value;
如果您想忽略时间,那么我认为最好的选择是进行范围搜索(如果时间存储在数据库中)。这样的事情(只是SQL查询):
SELECT * FROM Jobs WHERE JobDate >= @p_StartDate AND JobDate < @p_EndDate
StartDate将是dtpJobDate.Value.Date,EndDate将是dtpJobDate.Value.Date.AddDays(1)
dtpJobDate.Value.Date
dtpJobDate.Value.Date.AddDays(1)
如果时间未存储在数据库中,则可以执行以下操作:
SELECT * FROM Jobs WHERE JobDate = @p_Date
搜索参数应该在哪里 dtpJobDate.Value.Date