Foxpro2.6 的dbf文件,如何實現sql的检索结果(关鍵是能实现动态参数)?

bluecockroach 2006-09-14 10:09:21
private void selectDt()
{
string filename = @"C:\xxx.DBF";
string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ filename.Substring(0, filename.LastIndexOf("\\") + 1) + @";Extended Properties=""dBASE IV;HDR=Yes;"";";

OleDbDataAdapter adpt = new OleDbDataAdapter("Select * From [" + filename.Substring(filename.LastIndexOf("\\") + 1, filename.Length - filename.LastIndexOf("\\") - 1) + "]", strConn);
DataSet mySet = new DataSet();

adpt.Fill(mySet);
DataTable dt= mySet.Tables[0];
}
可以实现从dbf中提取数据到tatatable,但我需要动态的效果:
设xxx.dbf中有字段a,b,c,d;提取如下(SQL server的效果)
select a,left(b,3) as b,(case when a='1' then a+d else b+d end) as comb,c,d from xxx.dbf
而且这个需求是动态的,如何实现?
...全文
190 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluecockroach 2006-09-15
  • 打赏
  • 举报
回复
Knight94(愚翁)
--------------
你的方法是可以实现的,但是相对于用户来说已经写死,以上的需求是从一个實際的模型来的
用户通过一个小程式訪問dbf表,这个表存储的是产品信息(生产方面),但是这个程式打包发布给用户后,要由用户定义,不可以另外一个产品再修改方法重新打包...

dbf的ODBC连接不支持高级的SQL语句查询,否则简单许多,有一个思路:C#调用外部Jscript脚本(可以方便编辑,对代码掌握要求不高),转递一个数组:a,b,c,d;Jscript完成后返回a,left(b,3) as b,(case when c='1' then a+d+c else b+d+c end) as comb,c,d 的结果数组,不知道能否实现,谢了!

Knight94 2006-09-15
  • 打赏
  • 举报
回复
to 我要的效果是能动态转递查询语句的结果,不是一个固定的方法在C#中处理,可能的需求会变为:select a,left(b,3) as b,(case when c='1' then a+d+c else b+d+c end) as comb,c,d from xxx.dbf

当然如果dbf支持的话,你直接通过sql语句实现。
再说,我给的又不是一个死方法,你可以动态修改DataColumn.Expression,例如:
yourDataTable.Columns["comb"].Expression ="IIF( a='1',a+d+c,b+d+c)";
bluecockroach 2006-09-15
  • 打赏
  • 举报
回复
To:Knight94(愚翁)
---------
我要的效果是能动态转递查询语句的结果,不是一个固定的方法在C#中处理,可能的需求会变为:select a,left(b,3) as b,(case when c='1' then a+d+c else b+d+c end) as comb,c,d from xxx.dbf
zahuifan 2006-09-15
  • 打赏
  • 举报
回复
up
Knight94 2006-09-15
  • 打赏
  • 举报
回复
对于“left(b,3) as b”实现比较简单,如果dbf不支持相关的字符操作函数,你可以通过Column.Expression就可以解决,
例如:
yourDataTable.Columns.Add( "NewB", typeof( string ),
"SUBSTRING( b,0,3)" , MappingType.Attribute);
yourDataTable.Columns.Add( "comb", typeof( string ),
"IIF( a='1',a+d,b+d)" , MappingType.Attribute);

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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