2016-05-04 8 views
0

2つの日付で表される所定の期間内にデータを取得するSQL文を実行しようとしています。私は私がSQLパラメータを交換していたパラメータの値が正しい値であることを確認しているが、私はまだ、この例外を取得しています:データ型DateTimeを使用したParamaterized SQL C#

をSMALLDATETIMEする文字列を変換

構文エラーここではC#のコードは次のとおりです。

SqlCommand command = new SqlCommand("SELECT date, @Data FROM datasite WHERE date > '@Start' and date < '@End'", conn); 

command.Parameters.AddWithValue("@Data", dataType); 

var start = dateRange.StartDate.ToShortDateString(); 
var end = dateRange.EndDate.ToShortDateString(); 

command.Parameters.AddWithValue("@Start", start); 
command.Parameters.AddWithValue("@End", end); 

command.Connection.Open(); 

SqlDataReader reader = command.ExecuteReader(); 

while (reader.Read()) { //... } 
+1

"SELECT date, @Data FROM datasite WHERE date > @Start and date < @End"

に 'DateTime'自体を渡しますか? 'command.Parameters.AddWithValue(" @ Start "、dateRange.StartDate); ' –

+0

DateTimeとして渡すと、同じ例外が発生します。 – aiokos

+0

パラメータを使用する場合は、これらの単一引用符を削除します。 '' @ Start''は '@ Start'でなければなりません – LarsTech

答えて

4

考慮すべきいくつかのこと:

  1. あなたはToShortDateString()を使用して日付をキャストする必要はありません。代わりに、単に日付変数をパラメータ値として渡すことができます。command.Parameters.AddWithValue("@Start", dateRange.StartDate);
  2. SqlCommandテキストには、@Start@End変数の前後に一重引用符は必要ありません。代わりに、使用することができます:あなたは、コマンド文字列から単一引用符を削除する必要があるかもしれませんWHERE date > @Start AND date < @End
+0

明快で簡潔な応答をありがとう。私は、生のSQLクエリを書くときのようにDateTimesを処理しなければならないと考えましたが、これらの変更によって問題が修正されました。 – aiokos

1

ベストSQL文 などのために知られている形式に日付をフォーマットします。

dateRange.EndDate.ToString("yyyy-MM-dd hh:mm:ss"); 
+0

私はいくつかの異なるフォーマットを試しましたが、それでも同じExceptionが発生します。 – aiokos

1

"SELECT date, @Data FROM datasite WHERE date > '@Start' and date < '@End'"

関連する問題