OleDb读取Excel时, 如何使用sql条件查询

骄傲青蛙 2013-05-06 04:17:45
代码如下

//using System.Data;
//using System.Data.OleDb;



String file_name = "P:/test.xls";
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file_name + ";Extended Properties=Excel 8.0;";

OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [Sheet1$]", objConn);

OleDbDataAdapter obad = new OleDbDataAdapter();
obad.SelectCommand = objCmdSelect;
DataSet ds1 = new DataSet();
obad.Fill(ds1, "table1");
objConn.Close();

// 这里, 如何查询 第一列, 等于 tester 的数据
ds1.Tables[0].Select("A='tester'");

GridView1.DataSource = ds1;
GridView1.DataBind();





//test.xls 表格数据如下
//注明, 工号, 那列是第一行 , tester 第二行

工号 名称 基本工资 实发工资 合计
tester test 11 222 333
tester2 test2 22 333 555

...全文
352 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
尐凌 2013-07-17
  • 打赏
  • 举报
回复
[工号]=tester ,tester不要加单引号,不知道为什么,现在我也在用条件查询,加了单引号就不行,条件中间有空格好像也不行 tes ter ,可是我的条件中就是有空格的,唉,真不知道怎么办。
骄傲青蛙 2013-05-07
  • 打赏
  • 举报
回复
结帖 , 发个综合点的答案。


String file_name = "P:/test.xls";
String select_exp = "[工号]='tester'";
String query_string = "SELECT * FROM [Sheet1$]";
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file_name + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';";

OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
OleDbCommand objCmdSelect = new OleDbCommand(query_string, objConn);
OleDbDataAdapter obad = new OleDbDataAdapter();
obad.SelectCommand = objCmdSelect;
DataSet ds1 = new DataSet();
obad.Fill(ds1, "table1");
objConn.Close();

DataTable dt = ds1.Tables[0].Clone();
dt.Clear();
DataRow[] _data = ds1.Tables[0].Select(select_exp);
foreach (DataRow row in _data)
{
     dt.Rows.Add(row.ItemArray);
}
GridView1.DataSource = dt;
GridView1.DataBind();
EnForGrass 2013-05-07
  • 打赏
  • 举报
回复
引用 8 楼 coolesting 的回复:
[quote=引用 7 楼 Chinajiyong 的回复:] 不会哦 ds1.Tables[0].Select("[工号]='tester'") int count = ds1.Tables[0].Select("[工号]='tester'").CopyToDataTable().Rows.Count; 看看Count的值
没有 CopyToDataTable().Rows.Count; 这个方法 但我这样, 发现记录数相符, ds1.Tables[0].Select("[工号]='tester'").Length; 但怎么将这个查询结果, 赋值给GridView呢 ?[/quote] ds1.Tables[0].Select("[工号]='tester'")获取的是DataRow数组,Net3.5以上(包括Net3.5)就应该有 CopyToDataTable()这个方法,你也可以向楼上那样转换成DataTable
md5e 2013-05-07
  • 打赏
  • 举报
回复
引用 10 楼 coolesting 的回复:
[quote=引用 9 楼 liuchaolin 的回复:] 要再转成DataTable private DataTable getDataTable(DataTable sdata, string cond) { DataTable dt = sdata.Clone(); DataRow[] _data = sdata.Select(cond); foreach (DataRow row in _data) { dt.Rows.Add(row.ItemArray); } return dt; }
cond 这个参数是什么意思 ?[/quote] cond ="[工号]='tester'"
骄傲青蛙 2013-05-07
  • 打赏
  • 举报
回复
引用 9 楼 liuchaolin 的回复:
要再转成DataTable private DataTable getDataTable(DataTable sdata, string cond) { DataTable dt = sdata.Clone(); DataRow[] _data = sdata.Select(cond); foreach (DataRow row in _data) { dt.Rows.Add(row.ItemArray); } return dt; }
cond 这个参数是什么意思 ?
md5e 2013-05-07
  • 打赏
  • 举报
回复
要再转成DataTable private DataTable getDataTable(DataTable sdata, string cond) { DataTable dt = sdata.Clone(); DataRow[] _data = sdata.Select(cond); foreach (DataRow row in _data) { dt.Rows.Add(row.ItemArray); } return dt; }
骄傲青蛙 2013-05-07
  • 打赏
  • 举报
回复
引用 7 楼 Chinajiyong 的回复:
不会哦 ds1.Tables[0].Select("[工号]='tester'") int count = ds1.Tables[0].Select("[工号]='tester'").CopyToDataTable().Rows.Count; 看看Count的值
没有 CopyToDataTable().Rows.Count; 这个方法 但我这样, 发现记录数相符, ds1.Tables[0].Select("[工号]='tester'").Length; 但怎么将这个查询结果, 赋值给GridView呢 ?
EnForGrass 2013-05-06
  • 打赏
  • 举报
回复
不会哦 ds1.Tables[0].Select("[工号]='tester'") int count = ds1.Tables[0].Select("[工号]='tester'").CopyToDataTable().Rows.Count; 看看Count的值
骄傲青蛙 2013-05-06
  • 打赏
  • 举报
回复
表格, 如图, 我只想要工号等于tester的数据记录行

骄傲青蛙 2013-05-06
  • 打赏
  • 举报
回复
引用 4 楼 Chinajiyong 的回复:
[quote=引用 2 楼 coolesting 的回复:] 我想查询, excel里, A列(即工号) 等于 tester 的数据记录。。。
ds1.Tables[0].Select("[工号]='tester'");[/quote] 感谢大神的帮助, 这样不会报错, 但这样查询出所有记录, 我只想要 tester 的
EnForGrass 2013-05-06
  • 打赏
  • 举报
回复
引用 2 楼 coolesting 的回复:
我想查询, excel里, A列(即工号) 等于 tester 的数据记录。。。
ds1.Tables[0].Select("[工号]='tester'");
EnForGrass 2013-05-06
  • 打赏
  • 举报
回复
ds1.Tables[0].Select("[工号] like '%tester%'");
骄傲青蛙 2013-05-06
  • 打赏
  • 举报
回复
我想查询, excel里, A列(即工号) 等于 tester 的数据记录。。。
骄傲青蛙 2013-05-06
  • 打赏
  • 举报
回复
错误提示, 没有 A 列

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧