.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 ...
随机推荐
- 系统学习 Java IO (十五)----字符读写 Reader/Writer 其他子类
目录:系统学习 Java IO---- 目录,概览 跟踪行号的缓冲字符输入流 LineNumberReader LineNumberReader 类是一个 BufferedReader ,用于跟踪读取 ...
- composer使用本地仓库
{ "repositories": { "sms": { "type": "path", "url" ...
- pybind11在Windows下的使用
Pybind11算是目前最方便的Python调用C++的工具了, 介绍一下在vs2019上写Python的扩展的HelloWorld 1. 去下载pybind11 https://github ...
- LNet代码分析
源码版本:lustre-release 2.15.55 介绍 LNet是Lustre的网络模块,代码目录分为了lnet和lnd lnet提供了统一的接口 lnd封装了底层驱动,有socklnd(TCP ...
- POJ 1485:Fast Food(dp)&& 面试题
题目链接 题意 给出 n 个餐厅,m 个停车场,现在要将 n 个餐厅中的 m 个变成停车场,使得每个餐厅到最近的停车场的距离之和最短,输出哪个餐厅变成停车场和它服务哪些餐厅,还有最短距离之和. 思路 ...
- Codeforces 755B:PolandBall and Game(map+思维)
http://codeforces.com/problemset/problem/755/B 题意:A可以喊出n个字符串,B可以喊出m个字符串,如果一个字符串之前被喊过,那么它再也不能喊了,A先喊,最 ...
- Java连载5-标识符、关键字和字面值
一.标识符 1.标识符定义:在java源程序中凡是可以自己命名的单词 2.标识符可以标识什么元素? (1)类名(2)方法名(3)变量名(4)接口名(5)常量名 等等 3.标识符的命名要求 (1)一个合 ...
- 数据结构-堆栈和队列最简单的实现(Python实现)
OK,上篇博客我们介绍了双向链表以及代码实现,这篇文章我们来学习堆栈和队列. 队.栈和链表一样,在数据结构中非常基础一种数据结构,同样他们也有各种各样.五花八门的变形和实现方式.但不管他们形式上怎么变 ...
- ~~小练习:python的简易购物车~~
进击のpython 1,用户先给自己的账户充钱:比如先充3000元. 2,有如下的一个格式: goods = [{"name": "电脑", "pri ...
- 【Netty】使用解码器Decoder解决TCP粘包和拆包问题
解码器Decoder和ChannelHandler的关系 netty的解码器通常是继承自ByteToMessageDecoder,而它又是继承自ChannelInboundHandlerAdapter ...