Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用日期搜索数据库_C#_Sql_Ms Access_Datetime - Fatal编程技术网

C# 用日期搜索数据库

C# 用日期搜索数据库,c#,sql,ms-access,datetime,C#,Sql,Ms Access,Datetime,在我的windows窗体中,我有一个文本框,用户在其中以2013年2月16日的格式输入日期,以搜索该特定日期的所有条目。 在数据库中,我有一列以这种格式存储日期。16/02/2013 02:47:36 AM 有人可以建议我使用sql查询从数据库中提取特定日期的所有条目,并将其放在数据集上 我正在使用这个,但它不起作用 public DataSet OrderByDate(string date) { // string connString = "Provider=Microsoft.

在我的windows窗体中,我有一个文本框,用户在其中以2013年2月16日的格式输入日期,以搜索该特定日期的所有条目。 在数据库中,我有一列以这种格式存储日期。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中,日期时间存储为日期/时间格式。

在数据库端,如果数据类型为日期,则只需执行以下操作:

where yourdatefield = @dateIn
如果是约会时间,您可以执行以下操作:

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

由于您使用的是.net,因此在应用程序代码中有一些地方需要改进。首先,将日期字符串转换为DateTime对象。其次,将所有用户输入转换为参数。

您可能需要也可能不需要在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);

而且,这是我在这里写的一个快速而肮脏的方法。它应该可以工作,但您确实应该对此查询进行参数化。

以这种方式传递日期值不起作用,因为您的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注入攻击。

对查询使用绑定参数,而不是SQL语句中的文字。这不是好的做法。此外,日期/时间不是字符串,因此LIKE在这里没有真正的意义。应该是一个条件运算符=,BETWEEN,等等。我知道,一旦我能让它工作起来,我会改变它。你不能用LIKE来表示日期。你想达到什么目的?@AmritSharma,你在使用哪种RDBMS?查看日期的中间运算符,给它一个从午夜到一天结束的范围。你有时间为我写查询吗,我不知道如何才能使这件事起作用,从昨天起就卡住了