OleDB在创建DBF数字字段时总是再添加一个数字。像这样的命令:
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
答案 0 :(得分: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
相同的SQL通过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 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驱动程序之间的行为存在差异。
答案 1 :(得分:1)
除了基于零的计数之外,还有更多内容。如果您通过OLEDB发出以下内容:
ALTER TABLE MyTable ADD COLUMN n_value N(5, 4)
您获得的字段大小为7而不是6.此外,N(6, 4)
会产生N(8, 4)
。
KB #150434描述了ODBC驱动程序的相同行为。但是,即便是那篇文章也没有用4位小数准确描述上面的场景。我的测试表明,大小的等式是(来自C#代码):
if (places <= 1)
{
size -= 1;
}
else
{
size -= 2;
}
我能够使用各种数字列长度更新数百个不同的列,并且所有列都按预期更新。
答案 2 :(得分:0)
它可能就像从零开始的解释而不是基于一个但有趣的发现一样简单。