在我的Windows窗体中,我有一个文本框,用户以16/02/2013格式输入日期,以搜索该特定日期的所有条目。 在数据库中,我有一列以此格式存储日期.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;
}
在datbase中,日期时间存储为日期/时间格式。
答案 0 :(得分:0)
在数据库方面,如果您的数据类型是日期,则可以执行以下操作:
where yourdatefield = @dateIn
如果是日期时间,请执行以下操作:
where yourdatefield >= @dateIn
and yourdatefield < the day after @dateIn
由于您使用的是.net,因此您需要在应用程序代码中进行一些改进。首先,将日期字符串转换为DateTime对象。其次,将所有用户输入转换为参数。
答案 1 :(得分: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);
另外,这是我在这里写的一种快速而肮脏的方法。它应该可以工作,但你真的应该对这个查询进行参数化。
答案 2 :(得分:0)
以这种方式传递日期值不起作用,因为SQL引擎无法识别.NET中的默认格式化日期和时间值。
要将任何数据传递给查询,最好始终使用参数。向命令字符串添加参数:
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注入攻击。