2012-11-16 5 views
1

간단한 SqlCommand을 사용하여 지정된 DateTime 범위 내의 모든 레코드를 반환하고자합니다. (날짜 및 시간 모두가 참여하는)SqlCommand에서 DateTime을 비교하십시오.

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;