如何使用SQL Query使用< =运算符从数据库中获取值?

时间:2014-02-14 15:00:27

标签: c# sql database datatable dataset

我有以下查询:

 "C_START>= '01/01/0001 06:00:00 PM' AND C_END <= '01/01/0001 08:00:00 PM'"

其中C_STARTC_ENDDataTable的列名。

现在我将此查询传递为:

public static DataTable getval(query, dt)
{
    DataTable myTable = new DataTable();
    myTable = dt.Clone();
    DataRow[] dr = dt.Select(query);
    if (dr.Length > 0)
    {
       foreach (DataRow r in dr)
       {
          myTable.Rows.Add(r.ItemArray);
       }
    }
    return myTable;
}

myTable中显示此GridView时,我可以看到C_START大于或等于下午6点的所有记录的列表。 C_END有问题。它显示所有记录,包括那些C_END值大于8 PM的记录,根据传递的查询,这些记录是错误的。请建议如何消除此问题。

1 个答案:

答案 0 :(得分:0)

我相信,您可以使用LINQ而不是DataTable.Select()来获得更好的结果。不是将查询传递给Method,而是将其传递给您的开始/结束DateTime并将其用于条件。当然你可以传递它的字符串,但你需要进行一些转换。

以下示例假设您的C_STARTC_END值在DateTime中的类型为DataTable

    //Add more parameters based on your conditions
    public static DataTable GetVal(DateTime startDate, DateTime endDate, DataTable dt)
    {
        using (var myTable = dt.Clone())
        {
            var dr = from row in myTable.AsEnumerable()
                where row.Field<DateTime>("C_START") >= startDate
                   && row.Field<DateTime>("C_END") <= endDate
                   //Add more && statements to complete the query as needed.
                   //A string query is OK but you are prone to mistakes, why not let the compiler do the work.
                select new {row};

            foreach (var row in dr)
            {
                myTable.Rows.Add(row);
            }
            return myTable;
        }
     }

此外,您应该考虑比GetVal更具描述性的方法名称。此方法返回DataTable而非值,因此我会执行GetFilteredDataSetFilterDataTableByDate之类的操作。 C#中的方法名称是Camel Case而不是小写。