1

SqlCommand指定された DateTime 範囲内のすべてのレコードを返したい単純なものがあります。(日付と時刻の両方が関係します)

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

_startDtとはDateTime_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、「yyyy-mm-dd HH:mm:ss」日付形式は一般的に使用されていますが、SQL サーバーによって明確に解析されるとは限りません。連結文字列から SQL を作成する必要がある場合 (René が示したように、この場合は必要ありません)、ISO8601 形式を使用する必要があります。 "。

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 に答える