2012-08-09 58 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