2013-03-03 2 views
-1

Я пытаюсь получить данные из базы данных с использованием двух дат, но визуальная студия бросает синтаксическую ошибку.SQL-запрос для извлечения данных с использованием двух дат

Ниже приведен метод, который заполняет набор данных с помощью 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; 
} 

enter image description here

+0

Какая ошибка? –

+0

Вы прочитали [мой ответ на ваш другой вопрос] (http://stackoverflow.com/a/15009342/1174942)? –

+0

@ MD.Unicorn, он работает для одной даты, и я думаю, что он должен работать и между датами. Посмотрите скриншот для ошибки. –

ответ

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 + "#"; 

Заметили ли вы изменения? Параметры даты сопоставлены с строкой запроса.

+0

Это работает .. Я постараюсь выполнить вашу рекомендацию –

0

Ваше состояние следующим образом:

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

Теперь #date1# и #date2# не являются действительными даты - вы, вероятно, хотите добавить параметры к своему запросу. См. answer MD.Unicorn gave you in your other question

0

Помимо вашего возможного вопроса о формате даты, о котором уже упоминалось;

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

Order это ключевое слово из ORDER BY и нужно - во всех местах - быть заключен в [].

SELECT [Order].OrderNumber, 
... 
+0

Благодарим вас за отзыв, сделаем это, –

Смежные вопросы