1

我有一个简单SqlCommand的方法,我想返回指定日期时间范围内的所有记录。(包括日期和时间)

var dataReader = new SqlCommand(
    @"Select RecordID from RecordTable
    where RecordTable.WorkingDT between '"+ _startDt +"' and '"+ _endDt +"'",
    _sqlConnection).ExecuteReader();

如何设置和的_startDt_endDt

4

3 回答 3

2

你可以试试这个:

var dataReader = new SqlCommand(
    @"Select RecordID from RecordTable
    where RecordTable.WorkingDT between '"+ _startDt.ToString("yyyy-MM-dd HH:mm:ss") +"' and '"+ _endDt.ToString("yyyy-MM-dd HH:mm:ss") +"'",
    _sqlConnection).ExecuteReader();

DateTime的类型_startDt和位置。_endDt

于 2012-11-16T17:08:55.513 回答
2

如果将它们作为适当的参数添加到命令中,则无需担心格式化。养成使用这些习惯的额外好处是,当您将字符串作为参数提供时,您不必担心 SQL 注入。

看看http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06

它显示了如何在查询中使用参数。我不认为它需要完全拼写出来。

一个例子(从网站复制/粘贴):

// 1. declare command object with parameter
SqlCommand cmd = new SqlCommand(
    "select * from Customers where city = @City", conn);

// 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();

是的,定义参数可以比每个参数 3 行更短。但这留给读者。

于 2012-11-16T17:16:15.917 回答
1

@kmatyaszek,虽然常用,但不能保证 SQL 服务器明确解析“yyyy-mm-dd HH:mm:ss”日期格式。如果您必须从连接字符串创建 SQL(在这种情况下不是必要的,正如 René 所示),那么您应该使用 ISO8601 格式,它是相同的,但中间有一个 T:“yyyy-mm-ddTHH:mm:ss ”。

http://msdn.microsoft.com/en-us/library/ms190977%28v=sql.90%29.aspx

“使用 ISO 8601 格式的优势在于它是一个国际标准。此外,使用此格式指定的日期时间值是明确的。此外,此格式不受 SET DATEFORMAT 或 SET LANGUAGE 设置的影响。”

为了演示为什么,试试这个可重新运行的 Sql 脚本。

if object_id('tempdb..#Foo') is not null drop table #Foo;
create table #Foo(id int, d datetime)

-- Intend dates to be 12th Jan.
set dateformat ymd
insert into #Foo(id, d) values (1, '2012-01-12 01:23:45')   -- ok
insert into #Foo(id, d) values (2, '2012-01-12T01:23:45')   -- ok
set dateformat ydm
insert into #Foo(id, d) values (3, '2012-01-12 01:23:45')   -- wrong!
insert into #Foo(id, d) values (4, '2012-01-12T01:23:45')   -- ok

select * from #Foo order by id

if object_id('tempdb..#Foo') is not null drop table #Foo;
于 2012-11-16T17:43:50.670 回答