如何从.DBF数据库中读取星号(***)字段?

时间:2015-03-22 00:50:48

标签: vb.net dbf visual-foxpro

我正在尝试使用VB.NET读取.DBF数据库...代码正在工作,直到我到达其中一个应该是十进制的表的列,但它用星号填充。< / p>

我正在使用的连接字符串和阅读器是这样的:

Using SDBconnection As New OleDbConnection("User ID=;" & _
                                                    "DSN=;" & _
                                                    "Cache Authentication=False;" & _
                                                    "Data Source=""" & TextBox_DBLoc.Text & """;" & _
                                                    "Provider=""VFPOLEDB"";" & _
                                                    "Collating Sequence=MACHINE;" & _
                                                    "Mask Password=False;" & _
                                                    "persist security info=False;" & _
                                                    "Mode=Share Deny None;" & _
                                                    "Extended Properties=;" & _
                                                    "Encrypt Password=False")

Dim oleReader As OleDbDataReader = New OleDbCommand("Select * from " & table, SDBconnection).ExecuteReader()

是否有某种方法可以评估数据类型何时不对应,然后是演员或类似的事情?

该表在其他DBF阅读器软件中是可读的,读取时不会显示错误。我怎么能这样做?

编辑: 我的代码到达带有星号的列时抛出的错误消息是:

  

提供商无法确定十进制值。例如,刚刚创建了行,Decimal列的默认值不可用,并且消费者尚未设置新的Decimal值。

1 个答案:

答案 0 :(得分:2)

Visual Foxpro存在一个问题,显然允许用户在数字字段中输入溢出值,这似乎不会导致Visual Foxpro中出现问题。但是,使用Visual Foxpro以外的任何内容访问数据时会出现问题,因为它违反了此字段的设置。 VFPOLEDB将这些值作为星号返回。 作为解决方法,您可以尝试以下查询:

SELECT VAL(STR(SaleAmt)) as SaleAmt FROM MyTable

这会将十进制列(SaleAmt)转换为字符串,然后再返回数值。

您还可以检查数据是否存在溢出值,并修改dbf表结构以解决此问题。

This link explains this problem