Короче говоря: Я использую VB.NET 2008 для подключения к базе данных Visual Foxpro 6 с помощью драйвера vfpoledb.1.Когда я пытаюсь заполнить OleDbDataAdapter таблицей набора данных, содержащей один из числовых столбцов, я получаю следующее сообщение об ошибке:
Поставщик не может определить десятичное значение.Например, строка была только что создана, значение по умолчанию для столбца «Десятичное число» было недоступно, а потребитель еще не установил новое значение «Десятичное число».
Я хочу получить этот столбец из 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: Мой оператор SQL работает, если я преобразую bal_qty в String, но это вызывает проблемы с сортировкой.Я пробовал 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