使用datetime时sql where子句的问题

时间:2012-02-13 16:58:34

标签: c# sql sql-server-2008

任何人都可以帮我解决这个我想要执行的问题,

 static public DataTable GetAllCustomers()
{
    string sql = "Select * from [project] where [condition] = 0 AND [Time] < '" + DateTime.Now + "'";
    SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString);
    DataTable dt = new DataTable();
    da.Fill(dt);
    return dt;
}

它什么都不返回

我得到查询错误的任何想法。

2 个答案:

答案 0 :(得分:6)

由于格式和位置,将DateTime放入SQL字符串是一种灾难。将您的sql行更改为:

string sql = "Select * from [project] where [condition] = 0 AND [Time] < GetDate()";

这将以任何预期的格式使用服务器自己的当前日期时间。

如果您绝对需要在客户端执行操作,则使用SqlCommand而不是将DateTime作为字符串添加“Time&lt; @”,然后将DateTime添加为命令参数。这至少可以避免格式化问题。

答案 1 :(得分:2)

您知道SQL Server是否具有内置时间功能。试试这个:

string sql = "Select * from [project] where [condition] = 0 AND [Time] < GETDATE()";

或者如果您想要UTC中的日期,请执行以下操作:

string sql = "Select * from [project] where [condition] = 0 AND [Time] < GETUTCDATE()";

这样,代码中就没有任何字符串连接。

你能否回答以下问题:

  1. 哪一部分什么都没有回来?
  2. [Time]DATETIME数据类型还是类似(即:不是文字)