1

C#でDateTimePickerを使用して2つの日付の間にアクセスデータベースからレコードを取得しようとすると、データ型の不一致基準式エラーが発生します。

これはSelectステートメントです

else if (dtpDOBFrom.Value < dtpDOBTo.Value)
{
    cmdSearch.CommandText = "SELECT [First Name], [Surname], [Contact Type], [Birthdate] FROM [Contacts] WHERE [Birthdate] >= '" + dtpDOBFrom.Value +"' AND [Birthdate] <= '" + dtpDOBTo.Value +"'";
}
4

1 に答える 1

1

dtpDOBFrom.Value文字列に貼り付けようとしているDateTimeです。したがって、DateTimeは文字列に変換されますが、形式はAccessが期待する形式とは異なるようです。のパラメータで遊ぶこともできますが( Accessが必要としているので、の代わりにDateTime.ToString日付を囲みます)、それは正しい方法ではありません#'

一般にこのような型キャストの問題(およびSQLインジェクションなど)を回避する正しい方法は、パラメーターを使用することです。

あなたの場合、それは次のようになります(テストされていません):

cmdSearch.CommandText = "SELECT [First Name], [Surname], [Contact Type], [Birthdate] FROM [Contacts] WHERE [Birthdate] >= ? AND [Birthdate] <= ?";
cmdSearch.Parameters.AddWithValue("DOBFrom", dtpDOBFrom.Value);
cmdSearch.Parameters.AddWithValue("DOBTo", dtpDOBTo.Value);

OLEDB(MS Accessデータベースアクセスに使用される)では、パラメーターの名前( "DOBFrom")は重要ではありませんが、パラメーターを追加する順序は、SQLの疑問符の順序と一致する必要があります。

于 2010-03-23T11:15:55.317 に答える