日期:2014-05-18  浏览次数:20738 次

关于SQL取Ecexl 根据日期过滤的问题
using (OleDbConnection OleConn = new OleDbConnection(sConnectionString))
  {
  OleConn.Open();
  string sql = "SELECT * FROM [总$] WHERE F1>='2011/1/1' AND F1<='2011/1/2'";
  OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
  dtt.TableName = reportName;
  OleDaExcel.Fill(dtt);
  OleConn.Close();
  OleConn.Dispose();
  }  
取出的dtt 的值 
 2011/1/1
 2011/1/2
 2011/1/10
 2011/1/11
 ......
 2011/1/19

各位大拿 这是什么原因了 怎么修改才好

------解决方案--------------------
string sql = "SELECT * FROM [总$] WHERE F1>='2011/1/1' AND F1<='2011/1/2'";
这句话有问题 你的 2011/1/2加单引号不成字符串了吗?一个时间格式,一个字符串格式,当然查询错误了
------解决方案--------------------
C# code
using (OleDbConnection OleConn = new OleDbConnection(sConnectionString))
  {
  OleConn.Open();
  string sql = "SELECT * FROM [总$] ";
  OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
  dtt.TableName = reportName;
  OleDaExcel.Fill(dtt);
  OleConn.Close();
  OleConn.Dispose();
  }   

datarow[] dr dtt.select("F1>='2011/1/1' AND F1<='2011/1/2'");


DataTable newDt = new DataTable();

Foreach(DataRow dr in drs[])
{
newDt.ImportRow(dr);
}

------解决方案--------------------
貌似excel中的排序有点小问题,大概是这样的 1,11,12,13,14,15,16,17,18,19,2,20,21,22 他的2会排在19后面20前面,貌似是格式的问题,还要在确认一下
------解决方案--------------------
using (OleDbConnection OleConn = new OleDbConnection(sConnectionString))
{
OleConn.Open();
string sql = "SELECT * FROM [总$] ";
OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
dtt.TableName = reportName;
OleDaExcel.Fill(dtt);
OleConn.Close();
OleConn.Dispose();
}

datarow[] dr dtt.select("F1>='2011/1/1' AND F1<='2011/1/2'");


DataTable newDt = new DataTable();

Foreach(DataRow dr in drs[])
{
newDt.ImportRow(dr);
}


然后把 你的datatable中的时间格式改了不就ok了