1

私の Windows フォームには、ユーザーが 16/02/2013 の形式で日付を入力して、その特定の日付のすべてのエントリを検索するテキスト ボックスが 1 つあります。データベースには、この形式で日付を格納する列が 1 つあります。16/02/2013 02:47:36 AM。

その特定の日付のデータベースからすべてのエントリを抽出し、データセットに配置するための SQL クエリを教えてもらえますか。

私はこれを使用していますが、機能していません。

public DataSet OrderByDate(string date)
{
    //  string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Amrit\\Desktop\\Database.accdb ;Persist Security Info=False;";
    DataSet dataSet = new DataSet();
    OleDbConnection oleConn = new OleDbConnection(connString);

    try
    {
        oleConn.Open();
        string sql = "SELECT  Customer.[Title] + SPACE(2)  + Customer.[Customer's Name] as CustomerName, Customer.[Customer's Ebayname], Customer.[Email Address], Customer.[Phone Number], Customer.[Address 1] + SPACE(2)  +Customer.[Address 2] + SPACE(2)  + Customer.[City] + SPACE(2)  + Customer.[Post Code]+  SPACE(2)  + Customer.[Country] as Address, Customer.[Item Purchased], Customer.[Purchased Date], Customer.[Total Price] FROM Customer WHERE [Purchased Date] LIKE '" + "'" + date + "%'";
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, oleConn);
        dataAdapter.Fill(dataSet, "Customer");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
    finally
    {
        oleConn.Close();
    }
    if (dataSet.Tables.Count <= 0)
        return null;
    else
        return dataSet;
}

データベースでは、日時は日付/時刻形式で保存されます。

4

3 に答える 3

0

データベース側では、データ型が日付の場合、次のようにするだけです。

where yourdatefield = @dateIn

日時の場合は、次のようにします。

where yourdatefield >= @dateIn
and yourdatefield < the day after @dateIn

.netを使用しているため、アプリケーションコードで改善する必要のあることがいくつかあります。まず、日付文字列をDateTimeオブジェクトに変換します。次に、すべてのユーザー入力をパラメーターに変換します。

于 2013-02-17T04:31:18.833 に答える
0

.NET のデフォルトのフォーマットされた日付と時刻の値は SQL エンジンによって認識されないため、この方法で日付値を渡すことはできません。

クエリにデータを渡すには、常にパラメーターを使用することをお勧めします。コマンド文字列にパラメーターを追加します。

string sql = "SELECT * FROM Customer WHERE PurchaseDate = @pdate";

OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);
adapter.SelectCommand.Parameters.AddWithValue("pdate", date);
adapter.Fill(dataSet, "Customer");

@pdateコマンド テキストの はパラメーターです。例に示すように、コマンドを実行する前にパラメーターの値を指定する必要があります。

単純な文字列連結を使用して SQL ステートメントに値を入力することもできますが、これは単純な整数値または文字列値でのみ可能であり、SQL インジェクション攻撃を受ける可能性があるため、通常はお勧めしません。

于 2013-02-21T18:11:11.220 に答える
0

SQLで日時を一重引用符で囲む必要がある場合とない場合がありますが、覚えていません:

        DateTime start = DateTime.Parse("16/02/2013").Date;
        DateTime end = start.AddDays(1);
        string sql = "Select * From Customer WHere PurchasedDate >= {0} and PurchasedDate < {1}";
        sql = string.Format(sql, start, end);

また、これは私がここに書いた手っ取り早い方法です。うまくいくはずですが、このクエリをパラメータ化する必要があります。

于 2013-02-17T05:07:11.347 に答える