.NET读写DBF
C# 读写DBF分为两种模式,一种为OLEDB驱动,需要安装一个文件“VFPOLEDBSetup.msi”; 一种为Odbc模式,这种几乎上不需要安装Odbc驱动
我这边用的是第一种。
/// <summary>
/// 读DBF文件到DataTable
/// </summary>
/// <param name="dbname">DBF实际绝对路径带文件名</param>
/// <returns></returns>
public static DataTable DbfToDataTable(string dbname)
{
try
{
var conn = new OleDbConnection(string.Format(@"provider=VFPOLEDB.1;Source Type=DBF;data source={0};user id=admin;password=", dbname));
string table = dbname.Substring(dbname.LastIndexOf("\\") + );
var da = new OleDbDataAdapter(string.Format("select * from {0}", table), conn);
DataTable dt = new DataTable();
da.Fill(dt);
conn.Close();
return dt;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 写DataTable文件到DBF文件中
/// </summary>
/// <param name="dt">DataTable数据表</param>
/// <param name="filepath">DBF保存的绝对路径</param>
/// <param name="savefilename">DBF文件名</param>
/// <returns></returns>
public static void WriteToDbf(DataTable dt, string filePath, string savefilename)
{
// 连接字符串
string sConn =
"Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=" + filePath + "; " +
"Extended Properties=dBASE IV;";
OleDbConnection conn = new OleDbConnection(sConn);
conn.Open();
dt.TableName=DateTime.Now.ToString("yyyyMMddHHmmssff");
try
{
//如果存在同名文件则先删除
if (File.Exists(dt.TableName + ".dbf"))
{
File.Delete(dt.TableName + ".dbf");
}
OleDbCommand cmd; //建立新表
StringBuilder sbCreate = new StringBuilder();
sbCreate.Append("CREATE TABLE " + dt.TableName + ".dbf (");
for (int i = ; i < dt.Columns.Count; i++)
{
sbCreate.Append(dt.Columns[i].ColumnName);
sbCreate.Append(" char(25)");
if (i != dt.Columns.Count - )
{
sbCreate.Append(", ");
}
else
{
sbCreate.Append(')');
}
}
cmd = new OleDbCommand(sbCreate.ToString(), conn);
cmd.ExecuteNonQuery(); //插入各行
StringBuilder sbInsert = new StringBuilder();
foreach (DataRow dr in dt.Rows)
{
sbInsert.Clear();
sbInsert.Append("INSERT INTO " + dt.TableName + ".dbf (");
for (int i = ; i < dt.Columns.Count; i++)
{
sbInsert.Append(dt.Columns[i].ColumnName);
if (i != dt.Columns.Count - )
{
sbInsert.Append(", ");
}
}
sbInsert.Append(") VALUES (");
for (int i = ; i < dt.Columns.Count; i++)
{
sbInsert.Append("'" + dr[i].ToString() + "'");
if (i != dt.Columns.Count - )
{
sbInsert.Append(", ");
}
}
sbInsert.Append(')');
cmd = new OleDbCommand(sbInsert.ToString(), conn);
cmd.ExecuteNonQuery();
} //替换文件名
if (File.Exists(filePath + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".DBF"))
{
File.Move(filePath + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".DBF", filePath + "\\" + savefilename + ".DBF"); } MessageBox.Show("抄表文件下载完毕!", "【温馨提示】", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
conn.Close();
}
替换文件名的原因是因为保存DBF文件系统会自动生成文件名为yyyymmdd.DBF的DBF文件,改名为了实现自定义文件名。
.NET读写DBF的更多相关文章
- 《Java知识应用》Java读写DBF文件
1. 准备: Jar包下载:链接: https://pan.baidu.com/s/1Ikxx-vkw5vSDf9SBUQHBCw 提取码: 7h58 复制这段内容后打开百度网盘手机App,操作更方便 ...
- python读写dbf数据库
dbf数据库作为一种简单的数据库,曾经广泛使用.现在在金融领域还是有很多的应用之处,工作中遇到此类的问题,在此记录一下. 1. 读取dbf ''' 读取DBF文件 ''' def readDbfFil ...
- ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
在用c#生成应用程序的时候,读写dbf时,open方法出错 ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 以前这个程序是用着好 ...
- ArcGis dbf读写——挂接Excel到属性表 C#
ArcMap提供了挂接Excel表格信息到属性表的功能,但是当数据量较大到以万计甚至十万计的时候这个功能就歇菜了,当然,你可以考虑分段挂接.这个挂接功能只是做了一个表关联,属性记录每个字段的信息需要通 ...
- 关于FastDBF库读写ArcGis dbf文件的小bug
该库托管于GitHub,地址:https://github.com/SocialExplorer/FastDBF 贡献者应该都是老外,所以…… 1.解析文件头,字段名部分如果有中文命名字段会出错 在D ...
- Java读取Level-1行情dbf文件极致优化(2)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- Java读取Level-1行情dbf文件极致优化(1)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- JAVA用geotools读写shape格式文件
转自:http://toplchx.iteye.com/blog/1335007 JAVA用geotools读写shape格式文件 (对应geotools版本:2.7.2) (后面添加对应geotoo ...
- C#读写Shapefile
Shapefile文件是ArcGIS存储矢量要素的标准格式,要读写Shapefile最简单的方法当然是基于ArcObject(或者ArcEngine)开发,不过网上也有一些开源的解译Shapefile ...
随机推荐
- Mac下安装redis5.0 与命令
参考链接:https://blog.csdn.net/zyp1376308302/article/details/84257606 参开链接2:https://www.cnblogs.com/guan ...
- 【工具】读取proprtties工具类
获取properties内容: 基本的使用看网络上大多是这样的,使用时注意线程安全以及读写的实时性问题. 1.直接通过流读取(反射): InputStream inStream = this.get ...
- 长春理工大学第十四届程序设计竞赛(重现赛)B
B Bowling Game 题目链接:https://ac.nowcoder.com/acm/contest/912/B 题目 CUST的队员打完省赛后,小r带着大家去打保龄球. 保龄球是一项难度非 ...
- Ajax出现error常见情况(详细版)-火狐浏览器(Firefox)兼容性问题
作为一个程序员,遇到兼容性问题真的很苦恼,尤其是对我这种前端小菜鸡来说遇到了甚是凄惨.一般来说兼容性问题出现率Chrome < IE < Firefox (╯°Д°)╯︵┴┴ . 言归正 ...
- 利用jsonconvert来转换json数据格式 (对象转为json)
今天学了一下.net的WCF组件,边心血来潮,想着现在不都是前后分离,调接口开发不,于是赶紧写了一简单的后台数据,哈哈 废话不多说,直接上代码: 注意需要导入库! 实体类:Customer us ...
- ORA-06502:at "WMSYS.WM_CONCAT_IMPL",line 30 解决方法整理
之前数据量少的时候,用:select wm_concat(字段) from 表 拼接数据量小的话,没有问题,数据量超出4000个就会爆以下错误信息: 解决方法(Oracle 函数xmlagg拼接): ...
- 使Toast弹出不重叠的封装
一.问题 在频繁弹出toast的时候,弹出后出现延迟重叠的现象. 二.解决 Toast通常由makeTextT()方法实例化,如何不想要toast弹出时重叠,那么只需在应用中保持一个Toast对象即可 ...
- Java基本数据类型之间转换
一.自动类型转换 转换的过程自动发生规则:小——>大byte->short->int->long->float->double char类型识别为int,可以转成i ...
- sql锁的类型介绍:悲观锁,乐观锁,行锁,表锁,页锁,共享锁,排他锁,意向锁
1 悲观锁,乐观锁 悲观锁:顾名思义,很悲观,就是每次拿数据的时候都认为别的线程会修改数据,所以在每次拿的时候都会给数据上锁.上锁之后,当别的线程想要拿数据时,就会阻塞,直到给数据上锁的线程将事务提交 ...
- C# “从元数据”
所谓元数据.其实是指由微软所封装的类..这些类你可以查看.但是无法修改. 元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (PE) 文件或存储在内存中的程序进行描述.将您的代码编译 ...