-1

2 つの日付を使用してデータベースからデータを取得しようとしていますが、ビジュアル スタジオが構文エラーをスローします。

以下は、SQL クエリを使用してデータセットを埋めるメソッドです。

public DataSet OrderBetweenDates(string date1, string date2)
{


    //  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 Order.OrderNumber, (Customer.Title +SPACE(2)+ Customer.CustomerName) as [Customer Name], Customer.CustomerEbayname, Customer.EmailAddress, Customer.PhoneNumber, (Customer.Address1 + SPACE(2) + Customer.Address2 + SPACE(2)+ Customer.City + SPACE(2) + Customer.PostCode + SPACE(2) + Customer.Country) as Address,  Order.ItemPurchased, Order.PurchasedDate, Order.TotalPrice FROM Customer INNER JOIN [Order] ON Customer.[CustomerID] = Order.[CustomerID] WHERE [PurchasedDate] >= #date1# AND [PurchasedDate] <= #date2#";
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, oleConn);
        dataAdapter.Fill(dataSet, "Customer");
    }
    catch (Exception ex)
    {
        MessageBox.Show("An exception has been occured\n" + ex.ToString());
        Console.WriteLine(ex.ToString());
    }
    finally
    {
        oleConn.Close();
    }
    if (dataSet.Tables.Count <= 0)
        return null;
    else
        return dataSet;
}

ここに画像の説明を入力

4

3 に答える 3

1

推奨される方法 (強く推奨) は、パラメーターを使用することです。ただし、ベスト プラクティスに従うのではなく、常にトラブルに巻き込まれたい場合は、次の方法を試してください。

string sql = @"SELECT [Order].OrderNumber,
(Customer.Title +SPACE(2)+ Customer.CustomerName) as [Customer Name],
Customer.CustomerEbayname, Customer.EmailAddress, Customer.PhoneNumber,
(Customer.Address1 + SPACE(2) + Customer.Address2 + SPACE(2)+ Customer.City
 + SPACE(2) + Customer.PostCode + SPACE(2) + Customer.Country) as Address,
[Order].ItemPurchased, Order.PurchasedDate, Order.TotalPrice
FROM Customer INNER JOIN [Order] ON Customer.[CustomerID] = Order.[CustomerID]
WHERE [PurchasedDate] >= #" + date1 + "# AND [PurchasedDate] <= #" + date2 + "#";

変化に気づきましたか?日付パラメーターはクエリ文字列に連結されます。

于 2013-03-03T09:52:08.990 に答える
0

あなたの状態は次のとおりです。

WHERE [PurchasedDate] >= #date1# AND [PurchasedDate] <= #date2#

Now#date1##date2#は有効な日付ではありません。おそらく、これらのクエリにパラメーターを追加する必要があります。MD.Unicorn が他の質問で示した回答を参照してください。

于 2013-03-03T09:28:35.977 に答える
0

すでに言及されている可能性のある日付形式の問題に加えて;

SELECT Order.OrderNumber, 
...
Order.ItemPurchased, 
Order.PurchasedDate, 
Order.TotalPrice 
...

Orderは からのキーワードでORDER BYあり、すべての場所で で囲む必要があります[]

SELECT [Order].OrderNumber, 
...
于 2013-03-03T09:31:29.863 に答える