带有datetimepicker的SQL语句

Dav*_*her 2 c# sql datetime datetimepicker winforms

这应该是一个简单的.在Windows窗体中使用日期时间选择器时,我想要执行SQL语句,如下所示:

string sql = "SELECT * FROM Jobs WHERE JobDate = '" + dtpJobDate.Text + "'";
Run Code Online (Sandbox Code Playgroud)

不幸的是,这实际上并没有提供任何结果,因为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;
Run Code Online (Sandbox Code Playgroud)

非常感谢所有的帮助!

Fre*_*els 9

只有一个答案:使用参数化查询.

这是出于不同的原因:

  • 安全性(没有SQL注入的风险
  • 不再是你正在开设话题的那些问题
  • 性能.

因此,写下你的语句如下:

SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM Jobs WHERE JobDate = @p_Date"
cmd.Parameters.Add ("@p_Date", SqlDbType.DateTime).Value = dtpJobDate.Value;
Run Code Online (Sandbox Code Playgroud)

如果你想忽略时间,那么我认为最好的办法是进行范围搜索,如果时间存储在数据库中,那就是.像这样(只是SQL查询):

SELECT * FROM Jobs WHERE JobDate >= @p_StartDate AND JobDate < @p_EndDate
Run Code Online (Sandbox Code Playgroud)

然后是StartDate dtpJobDate.Value.Date,而EndDate将是dtpJobDate.Value.Date.AddDays(1)

如果时间未存储在数据库中,则可以执行以下操作:

SELECT * FROM Jobs WHERE JobDate = @p_Date
Run Code Online (Sandbox Code Playgroud)

搜索参数应该在哪里 dtpJobDate.Value.Date