2012-11-16 68 views
1

我有一個簡單SqlCommand中,我想一個指定的DateTime範圍內返回的所有記錄。 (日期和時間參與)比較的DateTime中的SqlCommand

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

怎麼辦我得爲_startDt_endDt設定值是多少?

回答

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

_startDt_endDt是日期時間類型。

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行。但這是留給讀者的。

1

@kmatyaszek,雖然通常使用的, 「YYYY-MM-DD HH:MM:SS」 的日期格式不能保證由SQL服務器被清楚地解析。如果你必須通過連接字符串來創建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;