小编典典

带datetimepicker的SQL语句

sql

希望这应该是一个简单的方法。在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;

非常感谢您的所有帮助!


阅读 236

收藏
2021-04-22

共1个答案

小编典典

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

这是由于不同的原因:

  • 安全性(不存在SQL注入风险
  • 不再是您正在打开主题的那些问题
  • 表现。

因此,这样编写您的语句:

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)

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

SELECT * FROM Jobs WHERE JobDate = @p_Date

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

2021-04-22