我正在尝试使用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值。
答案 0 :(得分:2)
Visual Foxpro存在一个问题,显然允许用户在数字字段中输入溢出值,这似乎不会导致Visual Foxpro中出现问题。但是,使用Visual Foxpro以外的任何内容访问数据时会出现问题,因为它违反了此字段的设置。 VFPOLEDB将这些值作为星号返回。 作为解决方法,您可以尝试以下查询:
SELECT VAL(STR(SaleAmt)) as SaleAmt FROM MyTable
这会将十进制列(SaleAmt)转换为字符串,然后再返回数值。
您还可以检查数据是否存在溢出值,并修改dbf表结构以解决此问题。