【发布时间】:2011-06-30 05:49:06
【问题描述】:
简而言之: 我正在使用 VB.NET 2008 连接到使用 vfpoledb.1 驱动程序的 Visual Foxpro 6 数据库。当我尝试使用包含数字列之一的数据集表填充 OleDbDataAdapter 时,我收到以下错误消息:
提供程序无法确定十进制值。例如,刚刚创建的行,Decimal 列的默认值不是 可用,并且消费者尚未设置新的 Decimal 值。
我想从 VB.NET 2008 中检索此列并将其保留为数字格式。
加长版:
我正在使用 VB.NET 连接到 Visual Foxpro 6 数据库。表中的一些列适用于最多 8 位的数字数据类型。我不确定 Visual Foxpro 数据类型是如何工作的,但似乎该字段允许某人输入以下任何示例值:
99999999
99999.99
9.99
9.00
{nothing}
来自 Visual Foxpro:我可以访问名为 Foxwin 的小程序,它允许我在本地 VFP 环境中浏览 VFP 表。这就是我用来访问数据以获取我在上面发布的示例的内容。从这里我可以看到该字段中的某些行根本不包含任何值,尽管在没有数据时它们似乎被空格填充。我尝试运行更新查询以使用有效数据填充每一行,但我的更新查询完成但没有更新任何行。我试过 ISNULL(bal_qty) 和 bal_qty IS NULL 都没有。
从 MS Access 2007:使用我在 VB.NET 中使用的相同驱动程序,我可以毫无问题地加载 ADO 记录集并将其绑定到表单。十进制值似乎被剥离,可能是因为它们都是“.00”。我更喜欢在 VB.NET 中构建这个小程序,所以我只使用 MS Access 进行测试。
来自 VB.NET:如果我将 bal_qty 转换为 String,我的 SQL 语句可以工作,但这会导致排序问题。我已经尝试过 VAL(STR(bal_qty)) 并且它失败并出现了我在上面发布的相同错误消息。这是我正在使用的代码:
Imports System.Data.OleDb
Public Class Form1
Dim sConString As String = "Provider=vfpoledb.1;Data Source=C:\MyDatabase.dbc;Mode=3;"
Dim con As OleDbConnection = New OleDbConnection(sConString)
Private Function FetchData()
con.Open()
Dim ds As DataSet = New DataSet()
Dim sSQL As String
'This SQL statement works but the data doesn't sort properly.
'sSQL = "SELECT item_cd, item_desc, STR(bal_qty) FROM invent;"
sSQL = "SELECT item_cd, item_desc, bal_qty FROM invent;"
Dim cmd As OleDbCommand = New OleDbCommand(sSQL, con)
Dim daInv As OleDbDataAdapter = New OleDbDataAdapter(cmd)
Dim iRecCount As Integer
iRecCount = daInv.Fill(ds, "invent") 'The error occurs here.
Me.DataGridView1.DataSource = ds.Tables("invent").DefaultView
End Function
Private Sub btnFetchData_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFetchData.Click
Call FetchData()
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
con.Close()
con = Nothing
End Sub
End Class
【问题讨论】:
标签: vb.net oledb foxpro visual-foxpro