1

2 つの DateTime 値の間で一連のデータをフィルター処理する際に問題が発生しています。

例: すべてのレコードを取得する From: 24/04/2013 3:54 PM; 宛先: 2013 年 4 月 24 日午後 4 時 30 分。

C# でプログラミングし、OLE DB を使用して Access データベースからデータを取得しています。「To」および「From」の DateTime 値は、GUI の DateTimePicker コントロールから取得されます。データ ソースの 'receiveDateTime' フィールドでデータをクエリしようとしています - Access では DateTime 形式で保存されています。

私のコードは次のように表示されます。

string SQLQuery = "SELECT EmailID, ServerName, receiveDateTime, Type, status, received, processed"
                + "FROM EmailTable, EmailTypesTable, ServerTable, StatusTable"
                + "WHERE EmailTypesTable.emailTypeID = EmailTypesTable.EmailType "
                + "AND ServerTable.ServerID = EmailTable.serverID "
                + "AND StatusTable.statusID = EmailTable.statusID "
                + "AND EmailTable.receiveDateTime BETWEEN " 
                + fromDateTime.Value.ToString("g") + "AND " + toDateTime.Value.ToString("g")";

loadDataGrid(SQLQuery);

解決策やアドバイスをいただければ幸いです。

ありがとう、

アラン。

4

2 に答える 2

2

1-日付値の間の一重引用符を忘れたようです:

string SQLQuery = "SELECT EmailID, ServerName, receiveDateTime, Type, status, received, processed"
                + "FROM EmailTable, EmailTypesTable, ServerTable, StatusTable"
                + "WHERE EmailTypesTable.emailTypeID = EmailTypesTable.EmailType "
                + "AND ServerTable.ServerID = EmailTable.serverID "
                + "AND StatusTable.statusID = EmailTable.statusID "
                + "AND EmailTable.receiveDateTime BETWEEN '" 
                + fromDateTime.Value.ToString("g") + "' AND '" + toDateTime.Value.ToString("g") +"' ";

2- パラメータ化されたパラメータも使用する方が良いでしょう:

SqlConnection con = new SqlConnection(MyconnectionString);
con.Open();
string SQLQuery = "SELECT EmailID, ServerName, receiveDateTime, Type, status, received, processed"
            + "FROM EmailTable, EmailTypesTable, ServerTable, StatusTable"
            + "WHERE EmailTypesTable.emailTypeID = EmailTypesTable.EmailType "
            + "AND ServerTable.ServerID = EmailTable.serverID "
            + "AND StatusTable.statusID = EmailTable.statusID "
            + "AND EmailTable.receiveDateTime BETWEEN @dateFrom AND @dateTo";

SqlCommand cmd = new SqlCommand(SQLQuery );
cmd.Parameters.AddWithValue("@dateFrom", fromDateTime.Value.ToString("g"));
cmd.Parameters.AddWithValue("@dateTo", toDateTime.Value.ToString("g"));
SqlDataReader reader = cmd.ExecuteReader();
//...

このクエリをデータベースで直接実行しようとすることで、問題を推測できた可能性があります

(私はSQLConnection、SQLCommand ...を使用しました。ここでは、使用している接続に基づいてその部分を変更する必要があります。)

于 2013-04-24T06:29:37.397 に答える