1

当我们创建 DBF 数字字段时,OleDB 总是向它们添加一个数字。像这样的命令: CREATE TABLE [file1.DBF] ( [MY_FIELD] NUMERIC(1,0) NULL) 将创建一个可以包含 2 个数字(或一个数字和一个减号)的字段。有趣的是,我可以像这样要求长度为零NUMERIC(0,0),它会创建一个长度为 1 的字段。

我找不到有关此行为的任何文档。

是特定于使用 oleDB 创建 DBF 还是其他 DB 也会发生同样的情况?

oleDB添加的额外数字是否仅用于处理减号?

这种行为是否一致?我的意思是,我可以在创建表格时将宽度减一吗?

编辑:这个问题已经在这里得到了很好的回答: http ://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/af245580-8897-4608-8fa0-f00286d37324?prof=required

4

3 回答 3

2

看起来 DRapp 可能正在做某事。

CREATE TABLE [file1.DBF] ( [MY_FIELD] NUMERIC(1,0) NULL)

FoxPro 创建:

Structure for table:    FILE1.DBF
Number of data records: 0       
Date of last update:    08/24/10
Code Page:              1252    
Field  Field Name      Type                Width    Dec   Index   Collate Nulls
    1  MY_FIELD        Numeric                 1                            Yes
** Total **                                    3

通过 OleDb 的相同 SQL 创建:

Structure for table:    FILE1.DBF
Number of data records: 0       
Date of last update:    08/24/10
Code Page:              1252    
Field  Field Name      Type                Width    Dec   Index   Collate Nulls
    1  MY_FIELD        Numeric                 2                            Yes
** Total **                                    4

但是,CREATE TABLE [file1.DBF] ( [MY_FIELD] NUMERIC(0,0) NULL)通过 OleDb 创建:

Structure for table:    FILE1.DBF
Number of data records: 0       
Date of last update:    08/24/10
Code Page:              1252    
Field  Field Name      Type                Width    Dec   Index   Collate Nulls
    1  MY_FIELD        Numeric                 1                            Yes
** Total **                                    3

与 FoxPro 相同的结构。无论出于何种原因,它确实指出 FoxPro 引擎和 VFPOLEDB 驱动程序之间的行为存在差异。

于 2010-08-24T15:55:47.123 回答
1

它不仅仅是从零开始的计数。如果您通过 OLEDB 发出以下命令:

ALTER TABLE MyTable ADD COLUMN n_value N(5, 4) 

你得到一个大小为 7 的字段,而不是 6。此外,N(6, 4)yield N(8, 4)

KB #150434描述了此行为与 ODBC 驱动程序相同。然而,即使是那篇文章也没有准确地描述上面有 4 个小数位的情况。我的测试表明,大小等式是(来自 C# 代码):

if (places <= 1)
{
    size -= 1;
}
else
{
    size -= 2;
}

我能够使用各种数字列长度更新数百个不同的列,并且所有列都按预期更新。

于 2011-06-30T21:02:07.613 回答
0

它可能就像基于零的解释与基于一的解释一样简单,但有趣的发现。

于 2010-08-24T12:07:37.727 回答