为什么这个C#日期与SQL datetime的比较没有返回结果?

时间:2015-03-23 17:39:28

标签: c# sql datetime

我知道SQL中这个日期范围之间存在记录,但是我尝试了各种格式,甚至使范围更大,但仍然没有返回结果。我在这个查询中错误地做了什么导致没有返回记录?谢谢你的帮助。

DateTime today = DateTime.Now;
DateTime tomorrow = today.AddDays(1);
DateTime yesterday = today.AddDays(-1);

DateTime dt = DateTime.Now;
string yesterdayString = yesterday.ToString("yyyy-MM-dd HH:mm:ss");
string tomorrowString = tomorrow.ToString("yyyy-MM-dd HH:mm:ss");

int itemNum = 0;
string query = "select DocID, CNo, DocType, DocNumber from errordata where cno = '" + cno + "' and createddate > '" + yesterdayString + "' and createddate < '" + tomorrowString + "' order by '" + sorton + "'desc";

3 个答案:

答案 0 :(得分:4)

您正在创建的查询缺少FROM子句。我希望你得到一个例外。

答案 1 :(得分:3)

如果您使用参数化查询,则不会出现此问题。 请参阅:http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06

您的查询应如下所示:

@"SELECT VALUE Contact FROM AdventureWorksEntities.Contacts 
            AS Contact WHERE Contact.LastName = @ln" ;

注意参数的@占位符 然后你可以这样做:

// 2. define parameters used in command object
SqlParameter param  = new SqlParameter();
param.ParameterName = "@City";
param.Value         = inputCity;

// 3. add new parameter to command object
cmd.Parameters.Add(param);

// get data stream
reader = cmd.ExecuteReader();

但参数值可以是正常的DateTime值,比如说DateTime.Today。 这应该让你开始。

同时检查您可能获得的例外情况。无效的sql会抛出异常。如果需要,抓住它们并更正sql。

答案 2 :(得分:3)

您可以尝试以下内容:

string query = "SELECT DocID, CNo, DocType, DocNumber "+
               "FROM tableName "+
               "WHERE cno = @cno AND "+
               "CreatedDate BETWEEN @yesterday AND @tomorrow";

var sqlCommand = new SqlCommand(query, connectionString);

sql.Parameters.Add("@cno", cno);
sql.Parameters.Add("@yesterday", yesterday);
sql.Parameters.Add("@tomorrow", tomorrow);

我认为您的问题是缺少FROM。此外,我使用参数编写了您的查询,这可以防止sql注入。