2013-03-03 104 views
-1

我试图从数据库检索数据使用两个日期,但Visual Studio引发语法错误。使用两个日期检索数据的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

什么是错误? – 2013-03-03 09:23:54

+0

您是否阅读过[我对您的其他问题的回答](http://stackoverflow.com/a/15009342/1174942)? – 2013-03-03 09:26:36

+0

@ MD.Unicorn,它适用于单日期,我认为它应该适用于日期之间。请查看截图以了解错误。 – 2013-03-03 09:37:47

回答

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

这工作..我会尽力实施您的建议 – 2013-03-03 09:56:23

0

除此之外已经提到的可能的日期格式问题;

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

OrderORDER BY关键字,需要 - 在所有的地方 - 被封闭在[]

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

感谢您的反馈,会做到这一点, – 2013-03-03 09:38:52