2012-03-30 7 views
1

日付を渡すことでレコードを取得しようとすると、日付の時刻ピッカーを使用して日付を送信していますが、最後のリーダーはレコードを表示しません。日時のクエリを実行する方法colomn

私はConvert(char(10),ext_date,101)と同じ問題に直面しているとして、日付時刻の変換を行いました。

string [email protected]"select * from extra_expense where CONVERT(char(10),ext_date,101) = @date"; 

sqlcommand = new SqlCommand(str,sqlconnection); 
sqlcommand.Parameters.Add("@date", SqlDbType.DateTime).Value = datetimepicker1.value); 
datareader = sqlcommand.ExecuteReader(); 
List<Projects> projects = new List<Projects>(); 
while (datareader.Read()) 
{ 

    Projects proj = new Projects(); 
    proj.expenseid = Convert.ToInt32(datareader.GetValue(0)); 
    proj.ProjectDate = Convert.ToDateTime(datareader.GetValue(1)); 

    projects.Add(proj); 

} 
datareader.Close(); 
return projects; 
+0

とともに

string [email protected]"select * from extra_expense where ext_date = @date"; 

を、あなたが取得しているエラーは何ですか? 'datetimepicker1.value'の値は何ですか? SQL形式ですか? –

+0

データタイプはext_dateとは何ですか? - ほとんどの場合、キャストは必要ありませんが、それがvarchar型の場合は、おそらくグローバリゼーションの問題です。 (yyyy-MM-dd対yyyy-dd-MMなど)。 – faester

+0

なぜあなたは 'ext_date'を変換していますか?あなたはすでにデータベース内の正確な一致をチェックしましたか? – MatBailie

答えて

1

あなたがそうのように、T-SQLで文字列として日付を指定することができます。

SELECT MyFields FROM MyTable 
WHERE StartDate >= '01-01-00' AND StartDate <= '12-31-00' 
+0

私はよく分かりませんが、文字列としての日付がデータベースに設定されている特定のパターンと一致する場合にのみ、これが機能すると思います。その構成が変更された場合、これは機能しません。 –

+0

その場合、私は#-syntaxを使うことができると信じています:Where StartDate> =#2000-01-01#StartDate <=#2000-12-31# –

0

あなたは、テーブル内のフィールドをキャストべきではありません、あなたは正しい型にパラメータをキャストする必要があります。実際には、パラメータはdatetimeとして宣言されているため、すでにキャストしていますが、クエリではext_dateをchar(10)に強制しています。 このお試しください:

sqlcommand.Parameters.Add("@date", SqlDbType.DateTime).Value = datetime.Parse(datetimepicker1.value); 
+0

文字列を解決しましたstr = "select * from extra_expense where CONVERT (varchar(10)、ext_date、101)= @日 "; sqlcommand.Parameters.Add( "@ date"、SqlDbType.DateTime).Value = DateTime.Parse(date); dateはdatetimepicker1.textです。 – San

関連する問題