2012-08-09 103 views
1

我正在尝试为SDF(空格分隔文件)生成行。我正在使用具有扩展属性DBASEIV的OLEDB适配器从DBASE IV DBF文件创建这些行以获取数据。我的数据列输出在填充后长度为425个字符,我将它放入VB.NET中的datagridview中以显示它。OLEDB Jet 4.0 SQL字符限制

但是,当我运行我的查询,而似乎正确执行结果字段限制为256个字符。我正在阅读的最长单个字段是35个字符,我将返回包含2个字段(条形码和SDF线)的数据集。据我了解,OLEDB Jet 4.0尝试基于前8行来猜测类型,但是因为所有行的数据列长度相同(425个字符),所以我不明白为什么它会选择较小的字段类型。我认为这是因为我的字段是使用字符串连接生成的字段。我在这个问题的底部列入了可怕的SQL。所以我的问题是如何获得完整的425字符输出?或者有没有一种方法可以将我自己的字段的数据类型指定为备忘录?

SELECT scan, 
RIGHT('0000000000000' + trim(cstr(scan)), 13) + 
LEFT(trim(cstr(name)) + '         ', 35) + 
LEFT(trim(cstr(name)) + '    ', 16) + 
' ' + 
'    ' + 
'  ' + 
'1 ' + 
'0.00  ' + 
'0.00  ' + 
'1' + 
'0.00 ' + 
'0.01  ' + 
'0.00  ' + 
'F' + 
'2' + 
'0.00 ' + 
'0.00 ' + 
' ' + 
' ' + 
' ' + 
'SALS' + 
' ' + 
' ' + 
LEFT(trim(cstr(plof)) + '    ', 13) + 
'    ' + 
'    ' + 
'0.00  ' + 
'0.00  ' + 
'0.00  ' + 
'F' + 
'T' + 
'001' + 
' ' + 
'T' + 
'01' + 
' ' + 
'  ' + 
' ' + 
' ' + 
'F' + 
'F' + 
'  ' + 
'  ' + 
'0 ' + 
'0.00  ' + 
'    ' + 
'0 ' + 
'0.00  ' + 
'0.00 ' + 
'0.00 ' + 
'0.00 ' + 
'1 ' + 
'1 ' + 
'1 ' + 
'0.00 ' + 
'0.00 ' + 
'0.00 ' + 
'0.00 ' + 
'0.00 ' + 
'0.00 ' + 
'    ' + 
'    ' + 
' ' 
as STTEMPLINE 
from salus where cstr(scan) in (select distinct cstr(scan) from nonscan) 

在此先感谢您的帮助。

回答

0

这是一个已知问题,根据前几行中的数据猜测数据类型。

看到这个帖子...

Load Excel sheet into DataTable but only the first 256 chars per cell are imported,

而且,看到这个帖子对于OLEDB与混合数据类型是如何交易的解释...

http://social.msdn.microsoft.com/Forums/pl-PL/csharplanguage/thread/0404d003-5bfb-44f9-8e6b-aebdfce24875

+0

啊,我还以为我已经覆盖了这一点,我的每一行都是相同的长度。每行只有一列是导入的数据列和默认值的混合,从代码中可以看出,最长的输入列只有35个字符,但所有结果表行都是425个字符,因此读取每行仍然不会有帮助,因为所有行都超出限制,它必须对查询生成的结果列执行不同的操作,而不是直接导入。基本上我试图从一个DBF文件创建一个固定长度的记录文件。 – feldoh 2012-08-20 21:49:09

+0

对不起,我想我很快就读了你的问题,而且还不够彻底。你可能曾经有任何空或只有空白的名称或扫描值?这是我能想到的唯一可能影响这一点的事情。也许一开始就有空行?无论如何,如果是我,我只需选择名称和扫描值,然后在VB或C#代码中执行所有此字符串连接,而不是在select语句中。在OLEDB加载数据之后,而不是在查询期间,这应该相当直接。 – Jim 2012-08-21 16:15:52

+0

hmmm,nope,no whitespace,我们使用0填充SCAN到13位,所以SCAN始终为0000000000000 - 9999999999999.我想在SQL中这样做的原因是我编写了一个工具,它允许我通过以下方式对几乎任何数据文件进行操作:提供连接字符串和查询。我几乎每次获得新客户都需要做这样的事情,但输入文件总是不同的,能够快速创建SQL数据文件比每次编写新程序要好得多到目前为止,我们有超过100个不必要的程序。 – feldoh 2012-08-21 20:11:09