用的DateTimePicker SQL语句(SQL statement with datetime

2019-08-04 15:10发布

这样应该可以是一个简单的。 当使用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;

巨大的感谢所有帮助!

Answer 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

然后开始日期将是dtpJobDate.Value.Date ,和结束日期将是dtpJobDate.Value.Date.AddDays(1)

如果时间不是存储在数据库中,那么你可以这样做:

SELECT * FROM Jobs WHERE JobDate = @p_Date

其中搜索参数应该是dtpJobDate.Value.Date



Answer 2:

尝试dtpJobDate.Value。



Answer 3:

比在其他的答案SQL注入其他的东西,你可以使用这样的事情:

dtpJobDate.Value.ToString("yyyyMMdd HH:mm:ss");

但可能你不会找到确切的时间匹配什么,这样你就可以改变你的查询像

string sql = "SELECT * FROM Jobs WHERE JobDate BETWEEN '" + dtpJobDateStart.Value.ToString("yyyyMMdd HH:mm:ss") + "' AND '" + + dtpJobDateEnd.Value.ToString("yyyyMMdd HH:mm:ss") + " + "'";


Answer 4:

首先 - 你已经离开门打开在你的例子SQL注入。

除此之外 - 回答你的问题,你就必须放弃的时代离JobDate列拿到了赛完成。 尝试这样的事情(例如,在离开比较SQL注入代码)...

string sql = "SELECT * FROM Jobs WHERE CAST(CONVERT(CHAR(8), JobDate, 112) AS DATETIME) = '" + dtpJobDate.Text + "'";

如果你要你的参数化查询 - 你可以做这样的事情...

using (var conn = new SqlConnection(myConnectionString))
using (var cmd = new SqlCommand("SELECT * FROM Jobs WHERE JobDate = @JobDate", conn))
{
    cmd.Parameters.Add(new SqlParameter("@JobDate", dtpJobDate.Value));

    conn.Open();
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            // your code here to deal with the records...
        }
    }
}


文章来源: SQL statement with datetimepicker