将DBF文件导入Sqlserver数据库
项目中的问题:用户选择N个dbf文件导入sql2005数据库,由于每年dbf表结构都在变化,所以在sql2005中根本就不存在,需要每年根据dbf的结构自动建表。(文章来自http://blog.csdn.net/whuyi/article/details/5990205)
解决方法(摘抄自网络):
--方法一:
select * into 要生成的SQL表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase IV;HDR=NO;IMEX=2;DATABASE=c:/','select * from dbf表名.dbf')
--方法二:
select * into 要生成的SQL表名 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase III;HDR=NO;IMEX=2;DATABASE=c:/','select * from dbf表名.dbf')
--方法三:
select * into 要生成的SQL表名 from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:/','select * from dbf表名.DBF')
--用前两种方法导入SQL SERVER后,源表再用VFP打开就不提示“不能存取文件”,说明语句执行后就把源表关闭了。不过也有不尽人意的地方,就是用前两种方法导入后,源表中的字符型字段导入后SQL表字段对应变成NVARCHAR了。
--第三种方法有一个缺点:把DBF表导入SQL Server中后,马上用VISUAL FOXPRO打开DBF表,会提示“不能存取文件”,即这个表还被SQL打开着呢。可是过了1分钟左右,再打开DBF表就可以了,说明经过一段时间后查询分析器才把这个表关闭。
可以直接将dbf文件导入sqlserver数据库,也可以先将dbf文件导入dataset,再将dataset的数据导入数据库。dbf文件导入dataset的具体实现方法如下:
需要引入system.data.Odbc包
public DataSet importDbfToDataSet(string FilePath, string tabname)
{
string strConnection = @"Dsn=Visual FoxPro Tables;sourcedb=" + FilePath.Substring(, FilePath.LastIndexOf("//")) + ";sourcetype=DBF;exclusive=No;backgroundfetch=Yes;collate=Machine"; //对于连接串,注意版本问题 string strSelect = "SELECT * FROM " + tabname;
OdbcConnection thisConnection = new OdbcConnection(strConnection);
thisConnection.Open();
OdbcDataAdapter thisAdapter = new OdbcDataAdapter(strSelect, thisConnection);
DataSet thisDataSet = new DataSet();
try
{
thisAdapter.Fill(thisDataSet);
}
catch (Exception e)
{
throw e;
}
finally
{
thisConnection.Close();
}
return thisDataSet;
}
下面的程序通过Timer定时器,设置定时将本地dbf文件直接存入数据库表,该dbf文件会定时被覆盖掉。
class Connect
{
//定义连接字符串,连接对象,命令对象
private String connectionstr;
private SqlConnection connection;
private SqlCommand command;
private DataSet dataset;
public Connect()
{
connectionstr = "Server=192.168.88.59;Initial Catalog=Test; User ID=sa;Password=sasa;";
connection = new SqlConnection(connectionstr);
dataset = new DataSet();
command = connection.CreateCommand();
connection.Open();
}
public void CreateTimer()
{
Timer timer = new Timer();
timer.Enabled = true;
timer.Interval = * ;//设置一分钟
timer.Elapsed+=new ElapsedEventHandler(timer_Elapsed);
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Connect c = new Connect();
int minute = e.SignalTime.Minute;
int iminute = ;
if(minute==iminute)//设置每个小时的第五分钟执行
c.Insert();
}
private void Insert()
{
//string filepath = "C;//";
//将dbf文件导入指定数据库的表
string creattb = "select * into tablename from OPENROWSET('MSDASQL','driver=Microsoft visual foxpro driver; sourcedb=c://;SourceType=DBF','select * from RSZ1031.dbf')";
SqlCommand mycommand = new SqlCommand(creattb, connection);
mycommand.ExecuteNonQuery();
}
}
1.无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "msdasql" 的数据源对象”;
原因是安装sql2005数据库的系统中没有 VFPODBC驱动,到http://msdn.microsoft.com/en-us/vfoxpro/bb190233.aspx下载并安装
2.SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问;
原因是因为“功能的外围应用配置器”中没有“启用openrowset和opendatasource支持”,只需要打开“功能的外围应用配置器”设置一下就可以。
将DBF文件导入Sqlserver数据库的更多相关文章
- 将TXT文件 导入 sqlserver数据库
情景一: 数据库已存在旧表名 old_table,列名old_column_name. 将TXT文件导入数据库已存在旧表old_table中,导入过程中需注意 数据源中列名可全部不修改 或 全部修改 ...
- 大数据量.csv文件导入SQLServer数据库
前几天拿到了一个400多M的.csv文件,在电脑上打开要好长时间,打开后里面的数据都是乱码.因此,做了一个先转码再导入数据库的程序.100多万条的数据转码+导入在本地电脑上花了4分钟,感觉效率还可以. ...
- BCP文件导入SQLServer数据库遇到的问题
1. BCP文件插入sql server数据库,未指定数据库字段类型情况下,需要每个字段单独指定字段长度 2.文件中的存储值得类型 3.设置最大的类型
- xp下Oracle数据库导入SQLServer数据库数据
Oracle数据库利用ODBC数据源.PLSQL Developer导入SQLServer数据库数据 操作: 建立数据源:控制面板→管理工具→数据源 (ODBC) 打开,界面如下: 点击添加,界面如下 ...
- 命令行下从bak文件恢复sqlserver数据库方法
命令行下从bak文件恢复sqlserver数据库方法 注:本文所示访问从SqlServer 2000 - 2014版都是通用的 参考:http://blog.sina.com.cn/s/blog_5c ...
- mysql 导入sqlserver数据库
#mysql 导入sqlserver数据库 EXEC master.dbo.sp_addlinkedserver @server = N'sjkxb00', @srvproduct=N'MySQL', ...
- 将.db文件导入SQLServer2008数据库
最近要做一个项目,需要连接数据库,给我的数据文件是sqlite,我需要将数据导入到SQLServer数据库 需要借助一个软件:DBDBMigration 页面最上方的选择框内,先选择数据文件类型,这里 ...
- 将csv格式的数据文件导入/导出数据库+添加新的字段
最近一直忙于实验室的事情,没有好好更新博客,在抓包的过程中,遇到了很多问题. 因为我常用Wireshark将抓包信息导出为csv文件,这里简单mark一下将csv文件导入/导出到数据库的2种方法: 一 ...
- 将*.sql数据库脚本导入到sqlserver中(sql文件导入sqlserver)
在SqlServer中这个是用生成sql脚本生成的 要是在导入数据库用数据导入/导出向导导不进去 其实要用查询分析器来打开sql文件 然后执行就可以了
随机推荐
- MySQL substring:字符串截取 (转载)
MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() ...
- MongoDB Shard部署及Tag的使用
Shard部署 准备测试环境 为准备数据文件夹 Cd /home/tiansign/fanr/mongodb/Shard mkdir configdb1 configdb2 configdb3 mk ...
- Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
- top:failed tty get 错误
运行命令,ps -ef | grep test | grep -v test | awk '{ print $2 }' | xargs top -H -p 想看test的实时状态,结果报了错,查了一下 ...
- PostgreSql常用脚本
添加表字段 ALTER TABLE public.university ADD COLUMN "Province" character varying(10); COMMENT O ...
- 制作OS X 10.9 Mavericks 安装U盘
转载:http://www.macx.cn/forum.php?mod=viewthread&tid=2094799 安装win7的话,在mac中使用bootcamp制作一个win7安装盘即可 ...
- Virtual Box常用指令
以下操作需在命令行里将当前路径设为 Virtual Box安装目录 1. 调整磁盘大小(只能调整动态分配的.vdi格式文件) VBoxManage modifyhd "xxx.vdi&quo ...
- UVALive 5058 Counting BST --组合数
题意:排序二叉树按照数插入的顺序不同会出现不同的结构,现在要在1~m选n个数,使按顺序插入形成的结构与给出的结构相同,有多少种选法. 解法:先将给出的结构插入,构造出一棵排序二叉树,再dfs统计,首先 ...
- FLEX的动画
1.使用自带效果 在Flex里面不像在Flash里面随意制作动画了,Flex更趋向于应用程序,而不是动画制作了,所以没有了时间轴的概念.在Flex中使用动画效果,可以用Flex自带的Effect,或者 ...
- Sublime3安装过程及常用插件安装及常用快捷键
1 先去http://www.sublimetext.com/官网下载软件,然后网上找一个验证码,注册完成. 2 安装Package Control ,Package Control 插件是一个方 ...