解决方法(摘抄自网络):
--方法一:
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(0, 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 = 60 * 1000;//设置一分钟 timer.elapsed+=new elapsedeventhandler(timer_elapsed); } void timer_elapsed(object sender, elapsedeventargs e) { connect c = new connect(); int minute = e.signaltime.minute; int iminute = 5; 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数据库_mysql的内容。