Чтение DBF с драйвером VFPOLEDB

Я использую драйвер VFPOLEDB для чтения файлов DBF, и я продолжаю получать эту ошибку, и я не уверен, почему и как решить проблему:

Поставщик не мог определить Десятичное значение. Например, строка была просто создана, значение по умолчанию для столбца Decimal не было доступно, и потребитель еще не установил новое Десятичное значение.

Вот код. Я называю эту стандартную программу, чтобы возвратить DataSet файла DBF и отобразить данные в DataGridView.

public DataSet GetDBFData(FileInfo fi, string tbl)
{
    using (OleDbConnection conn = new OleDbConnection(
    @"Provider=VFPOLEDB.1;Data Source=" + fi.DirectoryName + ";"))
    {
        conn.Open();
        string command = "SELECT * FROM " + tbl;
        OleDbDataAdapter da = new OleDbDataAdapter(command, conn);
        DataSet ds = new DataSet();
        da.Fill(ds);
        return ds;
    }
}
6
задан spottedmahn 8 January 2019 в 20:15
поделиться

3 ответа

Я наконец решил проблему, получив схему таблицы и затем преобразовав все несимвольные поля в varchar в инструкции select . Достаточно хорошо для предварительного просмотра содержимого таблицы.

0
ответ дан 17 December 2019 в 00:08
поделиться

Если вы добавляете строку из вашего gridview, она не обязательно использует значение по умолчанию, а скорее NULL, поэтому вам может потребоваться предварительно установить значения по умолчанию или установить для схемы значение NOT Allow Nulls.

Вы можете автоматизировать просмотр столбцов после выполнения запроса и принудительно установить значения по умолчанию на основе типов данных столбцов, например

foreach (DataColumn oDC in YourDataSet.Tables[0].Columns)
{
   if (oDC.DataType.ToString().Contains("String"))
    oDC.DefaultValue = "";
   else if (oDC.DataType.ToString().Contains("Int32"))
    oDC.DefaultValue = 0;
   else if (oDC.DataType.ToString().Contains("DateTime"))
    oDC.DefaultValue = DateTime.MinValue;
}

это всего лишь 3 типа по умолчанию, но могут быть и другие, такие как boolean, decimal, float и т. Д. просто добавьте в if / else и установите любые значения "по умолчанию". Это МОЖЕТ помочь там, где в противном случае при добавлении новых строк вводятся значения "NULL".

0
ответ дан 17 December 2019 в 00:08
поделиться

Я нашел решение здесь: Ошибка чтения определенных числовых значений с помощью драйвера VFPOLEDB

SELECT CAST(FieldName As NUMERIC(11, 3)) From TableName
7
ответ дан 17 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: