VFPOLEDB清空dbf后为什么dbf文件大小还是未变化?是数据未如何彻底清空手机删除吗?

由于历史的原因,我国的上交所和深交所使用的还是dbf文件来进行行情数据的分发,关于卫星报盘系统,可以参考: 这个博客中关于证券公司信息化的文章写的还是相当不错的。上交所使用的是show2003.dbf文件,而深交所使用的是SJSHQ.DBF,这种文件可以使用Visual FoxPro直接打开,查看其内容。接下来说说怎么使用C#读取其中的数据。
使用C#读取dbf文件,推荐使用OLE DB来读取(微软官方都不推荐使用ODBC来读),首先需要下载安装,接下来就可以使用C#操作OLE DB,连接字符串为:
Provider=Data Source=C:\Collating Sequence=
这里C:\vfp是一个文件夹路径,要读取的dbf文件就在这个文件夹下面;当然,如果dbf是在网络共享位置,那么也可以使用网络文件夹的路径。如果要读取深交所行情的所有数据,返回一个DataSet,那么对应的函数为:
public&static&DataSet&ReadSJSHQ()&{&&&&&string&strConn&=&@"Provider=Data&Source=C:\Collating&Sequence=";&&&&&using&(OleDbConnection&myConnection&=&new&OleDbConnection(strConn))&&&&&{&&&&&&&&&OleDbDataAdapter&adpt&=&new&OleDbDataAdapter("select&*&from&SJSHQ.DBF",&myConnection);&&&&&&&&&DataSet&mySet&=&new&DataSet();&&&&&&&&&adpt.Fill(mySet);&&&&&&&&&myConnection.Close();&&&&&&&&&return&myS&&&&&}&}
这个函数就可以把所有深交所的数据读取出来,如果要读取上交所的数据,那么就不会这么简单了,虽然使用这个方法把查询改成select * from show2003.dbf也能读取返回一个数据集,但是这个返回的数据集是不完整的,前面大约200多行数据没有读取出来。如果使用Visual FoxPro打开show2003.dbf文件可以查看到所有的数据内容。之所以没有返回前200多行的原因是因为dbf文件中将这些行置为删除状态了,所以如果要读取所有的数据行,那么需要设置当前读取的命令去掉删除标记。比如要读取上交所dbf文件中的所有S1列,那么对应的代码应该是:
public&static&DataSet&ReadShow2003S1()&{&&&&&string&strConn&=&@"Provider=Data&Source=C:\Collating&Sequence=";&&&&&using&(OleDbConnection&myConnection&=&new&OleDbConnection(strConn))&&&&&{&&&&&&&&&myConnection.Open();&&&&&&&&&OleDbCommand&cmd&=&new&OleDbCommand();&&&&&&&&&cmd.Connection&=&myC&&&&&&&&&mandText&=&"SET&DELETED&OFF";//去掉删除标记,拿到所有记录&&&&&&&&&mandType&=&CommandType.T&&&&&&&&&cmd.ExecuteNonQuery();&&&&&&&&&OleDbDataAdapter&adpt&=&new&OleDbDataAdapter("select&s1&from&show2003.dbf",&myConnection);&&&&&&&&&DataSet&mySet&=&new&DataSet();&&&&&&&&&adpt.Fill(mySet);&&&&&&&&&myConnection.Close();&&&&&&&&&return&myS&&&&&}&}
如果我们要获取show2003里面的所有行所有列的数据,那么使用sql命令“select * from show2003.dbf”是会抛出异常:
提供程序无法确定 Decimal 值。例如,该行刚刚创建,未提供 Decimal 列的默认值,并且使用者尚未设置新 Decimal 值。
而在不读取有删除标记的行时是不会报错的,这是因为前面的行中有些列值的问题,用Visual Foxpro打开show2003.dbf文件,可以看到第一行S1为000000的数据行,其S6列是当前dbf文件数据生成的日期,比如我现在的S6值为,这一列的数据定义是“数值型,宽度8,小数位数3”,据说是设计上的Bug,参见:,于是我们如果要正常读取这个表的话需要对第一行做特别处理。其实本来第一行就需要特殊处理的,因为第一行并不是实际的数据,第一行主要是说明这个文件产生的日期时间之类的,所有我使用的就是简单粗暴的方法,使用2个DataSet来返回这些数据,具体函数代码为:
public&static&DataSet&ReadShow2003(DataSet&mySet0)&{&&&&&string&strConn&=&@"Provider=Data&Source=C:\Collating&Sequence=";&&&&&using&(OleDbConnection&myConnection&=&new&OleDbConnection(strConn))&&&&&{&&&&&&&&&myConnection.Open();&&&&&&&&&OleDbCommand&cmd&=&new&OleDbCommand();&&&&&&&&&cmd.Connection&=&myC&&&&&&&&&mandText&=&"SET&DELETED&OFF";//去掉删除标记,拿到所有记录&&&&&&&&&mandType&=&CommandType.T&&&&&&&&&cmd.ExecuteNonQuery();&&&&&&&&&//单独读取第一行&&&&&&&&&OleDbDataAdapter&adpt0&=&new&OleDbDataAdapter("SELECT&&s1,s2,s3,s4,s5,str(s6)&as&s6,s11,s13,s15,s17&from&show2003&where&s1=\"<span style="color: #0000\"",&myConnection);//只有这几个字段有值&&&&&&&&&&&&&&&&&&&&&&&adpt0.Fill(mySet0);&&&&&&&&&//接下来读取其他行&&&&&&&&&OleDbDataAdapter&adpt&=&new&OleDbDataAdapter("SELECT&*&from&show2003&where&s1&&\"<span style="color: #0000\"",&myConnection);&&&&&&&&&DataSet&mySet&=&new&DataSet();&&&&&&&&&adpt.Fill(mySet);&&&&&&&&&myConnection.Close();&&&&&&&&&return&myS&&&&&}&}
至此,我们已经将深交所和上交所的行情文件都读取出来了,接下来就是做其他逻辑处理~~~~~~
阅读(...) 评论()Foxpro数据库连接错误解决方法--【VFP DBF文件不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器】 - SummerRain - 博客园
ASP.NET/数据库/信息安全
posts - 231, comments - 239, trackbacks - 6, articles - 0
直接访问vfp dbf文件时报错:
错误描述: 'd:\vfpData\test.dbf'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。
解决办法:Data Source=目录!!!!!!(d:\vfpData)
(1)------------------------------------------------------------------------------------------------
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=APassword=;
更多连接字符串参考:
(2)------------------------------------------------------------------------------------------------Hi Abhay,
I recommend that you use the OLE DB data provider for FoxPro and VisualFoxPro.
There are two formats that the connection string should take, depending onwhat data you have.
For FoxPro "free" tables use just the path to the directory where the DBFsare: "Provider=VFPOLEDB.1;Data Source=C:\Temp;"&Note that the Data Source isnot in quotes it's delimited bye the equal sign and the semicolon.&When youwant to work with a specific table you'll specify it in your SQL string:strSQL = "Select * From SomeTable" (Table is C:\Temp\SomeTable.dbf)
For Visual FoxPro tables that belong to a "Database Container" you need tospecify the DBC in the connection string: "Provider=VFPOLEDB.1;DataSource=C:\Temp\MyDBC." If a DBC file is present with the DBFs then usethis format, otherwise use the free table format. Again refer to a specifictable in your SQL command: strSQL = "Select * From SomeTable"
========================================================OpenDataSource为啥VFP7.0的dbf操作不了, 把表转成foxplus的dbf就能执行 - 数码设备当前位置:& &&&OpenDataSource为啥VFP7.0的dbf操作不了, 把表转成fOpenDataSource为啥VFP7.0的dbf操作不了, 把表转成foxplus的dbf就能执行&&网友分享于:&&浏览:13次OpenDataSource为什么VFP7.0的dbf操作不了, 把表转成foxplus的dbf就能执行?OpenDataSource为什么VFP7.0的dbf操作不了,&把表转存成foxplus的dbf就能执行?我想直接用vfp7版本的dbf,不想总去转化成低版本。我想应该是改Extended&properties=后的内容,但不知改成什么。
对问题的详细说明:
在查询分析器中执行是命令如下:
select&*&from&OpenDataSource(&'Microsoft.Jet.OLEDB.4.0',&'Data&Source="c:\";User&ID=APassword=;Extended&properties=dBase&5.0')...students
如果dbf表是foxplus版本的,一切正常
如果同一dbf表是VFP7.0版本的,出现以下出错信息:
服务器:&消息&7399,级别&16,状态&1,行&1
OLE&DB&提供程序&'Microsoft.Jet.OLEDB.4.0'&报错。&
[OLE/DB&provider&returned&message:&外部表不是预期的格式。]
OLE&DB&错误跟踪[OLE/DB&Provider&'Microsoft.Jet.OLEDB.4.0'&IDBSchemaRowset::GetRowset&returned&0x:&&&]。------解决方案--------------------你用的是JET引擎,非VFP OLEDB
select&*&from&openrowset('VFPOLEDB.1','d:\zz';'admin';''&,'select&*&from&dd!aa')
到MS的网站下载VFPOLEDB
select&*&from&openrowset('VFPOLEDB.1','d:\zz';'admin';''&,'select&*&from&dd!aa')------解决方案--------------------请参考:
http://blog.csdn.net/apple_8180/archive//952751.aspx------解决方案--------------------VFP的ODBC驱动版本太低
看看ODBC数据源中VFP的驱动程序是不是1.0版的,是就换个高的
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有共有 2833 人关注过本帖
标题:DBF数据库导出TXT文件,如何去掉双引号只用 逗号分隔字符型数值。
等 级:新手上路
&&已结贴√
&&问题点数:20&&回复次数:14&&&
DBF数据库导出TXT文件,如何去掉双引号只用 逗号分隔字符型数值。
如题。我在编一个程序。有两个数据库结构基本相同,但有十几个字段是不同的。要把所有的双引 号去掉,同过文本文件可能直接互转。由于是编程,这个过程必须在程序内完成。
搜索更多相关主题的帖子:
来 自:神界
等 级:友情版主
威 望:338
帖 子:10967
专家分:43138
DO IT YOURSELF !
等 级:版主
威 望:117
帖 子:5773
专家分:12307
用代码将DBF导出到文本文件,可以设置任意分隔符。
等 级:版主
威 望:117
帖 子:5773
专家分:12307
贴上一段文本文件看看
[ 本帖最后由 sdta 于
22:05 编辑 ]
等 级:新手上路
关键是导出文本以后,要再导入到另一个DBF库中。这两个库一些字段属性不同。如果文本中没有了双引号就可以实现互转。我用COPY TO命令,有其他分隔符都不行。
来 自:尧的故乡
等 级:贵宾
威 望:44
帖 子:1850
专家分:4381
把引号处理掉就是了,生成new.txt:
COPY TO f:\test DELIMITED WITH BLANK
STRTOFILE(CHRTRAN(FILETOSTR(&f:\test.txt&),'&',''),&f:\new.txt&)
相互学习,互相交流,共同提高。
来 自:尧的故乡
等 级:贵宾
威 望:44
帖 子:1850
专家分:4381
就怕处理过的没有引号的文件转换起来会有新的问题。
[ 本帖最后由 qjbzjp 于
23:01 编辑 ]
相互学习,互相交流,共同提高。
来 自:广州
等 级:蜘蛛侠
帖 子:414
专家分:1183
COPY TO txt1&&DELIMITED WITH ' '
等 级:新手上路
STRTOFILE(CHRTRAN(FILETOSTR(&f:\test.txt&),'&',''),&f:\new.txt&)这个帮到我了,谢谢qjbzjp!!
等 级:版主
威 望:117
帖 子:5773
专家分:12307
以下是引用土言在 22:34:47的发言:
关键是导出文本以后,要再导入到另一个DBF库中。这两个库一些字段属性不同。如果文本中没有了双引号就可以实现互转。我用COPY TO命令,有其他分隔符都不行。把表传上来看看
也可能不需要这么复杂
版权所有,并保留所有权利。
Powered by , Processed in 0.025383 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved> 没有执行drop操作,手动删除了无用DBF文件后,导致无法启动ORCL前言:数据库没有执行drop
没有执行drop操作,手动删除了无用DBF文件后,导致无法启动ORCL前言:数据库没有执行drop
louis_rain & &
发布时间: & &
浏览:7 & &
回复:0 & &
悬赏:0.0希赛币
没有执行drop操作,手动删除了无用DBF文件后,导致无法启动ORCL
  前言:数据库没有执行drop某个表空间,手动删除dmp文件,导致无法正常启动orcl
  解决思路,删除文件了里相关的dmp关联。
  解决过程如下
Microsoft Windows [版本 6.1.7600] 
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 
C:\Users\守望幸福& set oracle_sid=orcl 
C:\Users\守望幸福&sqlplus "/as sysdba" 
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 12月 19 09:55:54 2012
Copyright (c) , Oracle.  All rights reserved.
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production 
With the Partitioning, OLAP and Data Mining options 
SQL& shutdown immediate 
ORA-01109: 数据库未打开
已经卸载数据库。 
ORACLE 例程已经关闭。 
SQL& startup 
ORACLE 例程已经启动。 
Total System Global Area  bytes 
Fixed Size          1250428 bytes 
Variable Size        bytes 
Database Buffers      bytes 
Redo Buffers        7135232 bytes 
数据库装载完毕。 
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件 
ORA-01110: 数据文件 8: 'D:\TBS01.DBF' 
SQL& startup 
ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它 
SQL& shutdown immediate 
ORA-01109: 数据库未打开
已经卸载数据库。 
ORACLE 例程已经关闭。 
SQL& startup 
ORACLE 例程已经启动。 
Total System Global Area  bytes 
Fixed Size          1250428 bytes 
Variable Size        bytes 
Database Buffers      bytes 
Redo Buffers        7135232 bytes 
数据库装载完毕。 
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件 
ORA-01110: 数据文件 8: 'D:\TBS01.DBF' 
SQL& SHUTDOWN IMMEDIATE 
ORA-01109: 数据库未打开 
已经卸载数据库。 
ORACLE 例程已经关闭。 
SQL& startup 
ORACLE 例程已经启动。 
Total System Global Area  bytes 
Fixed Size          1250428 bytes 
Variable Size        bytes 
Database Buffers      bytes 
Redo Buffers        7135232 bytes 
数据库装载完毕。 
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件 
ORA-01110: 数据文件 8: 'D:\TBS01.DBF' 
SQL& recover datafile 'd:\TBS01.DBF' 
ORA-00283: 恢复会话因错误而取消 
ORA-01110: 数据文件 8: 'D:\TBS01.DBF' 
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件 
ORA-01110: 数据文件 8: 'D:\TBS01.DBF' 
SQL& select  name  from v$ 
------------------------------------------------------------------------------- 
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF 
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF 
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF 
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF 
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\MYSPACE.DBF 
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DZYX.DBF 
D:\ORACLE\PRODUCT\10.2.0\ORADATA\JYLSXT.DBF 
D:\TBS01.DBF 
D:\TBS02.DBF 
D:\TBS03.DBF 
D:\TBS04.DBF 
已选择11行。 
SQL& alter  database datafile 6 
alter  database datafile 6 offline 
第 1 行出现错误: 
ORA-01145: 除非启用了介质恢复, 否则不允许立即脱机
SQL& ALTER  DATABASE DATAFILE 'D:\GH_01.DBF' OFFLINE DROP ; 
ALTER  DATABASE DATAFILE 'D:\GH_01.DBF' OFFLINE DROP 
第 1 行出现错误: 
ORA-01516: 不存在的日志文件, 数据文件或临时文件 "D:\GH_01.DBF" 
SQL& alter  database datafile 'D:\TBS01.DBF' OFFLINE DROP ;
数据库已更改。 
ORA-01109: 数据库未打开 
已经卸载数据库。 
ORACLE 例程已经关闭。 
SQL& startup 
ORACLE 例程已经启动。 
Total System Global Area  bytes 
Fixed Size          1250428 bytes 
Variable Size        bytes 
Database Buffers      bytes 
Redo Buffers        7135232 bytes 
数据库装载完毕。 
ORA-01157: 无法标识/锁定数据文件 9 - 请参阅 DBWR 跟踪文件 
ORA-01110: 数据文件 9: 'D:\TBS02.DBF' 
SQL&  alter  database datafile 'D:\TBS02.DBF' OFFLINE DROP ; 
数据库已更改。 
SQL&  alter  database datafile 'D:\TBS03.DBF' OFFLINE DROP ; 
数据库已更改。 
SQL&  alter  database datafile 'D:\TBS04.DBF' OFFLINE DROP ; 
数据库已更改。 
ORA-01109: 数据库未打开 
已经卸载数据库。 
ORACLE 例程已经关闭。 
SQL& startup 
ORACLE 例程已经启动。 
Total System Global Area  bytes 
Fixed Size          1250428 bytes 
Variable Size        bytes 
Database Buffers      bytes 
Redo Buffers        7135232 bytes 
数据库装载完毕。 
数据库已经打开。
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 彻底清空电脑 的文章

 

随机推荐