2011-09-14 23 views
1

我有一個頁面可以上傳csv文件並保存到數據庫中的表格。我使用下面的連接字符串來讀取一個CSV文件。在經典的asp中讀取csv文件。問題:列值被截斷爲300個字符

set connection = Server.CreateObject ("ADODB.Connection") 
connection.Open Connection_string 

ls_map_path = server.MapPath(as_path) 

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ 
ls_map_path & ";Extended Properties=""Text;HDR=Yes;FMT=Delimited"";" 

Set lo_rs = Server.CreateObject("ADODB.recordset") 
lo_rs.CursorLocation = adUseClient 
lo_rs.open "SELECT * FROM " & as_file_name, lo_conn, adOpenStatic, adLockOptimistic, adCmdText 

do while not lo_rs.eof 
    ls_notes = lo_rs.fields.Item("notes").value 
    uf_save_note(ls_notes) 
    lo_rs.movenext 
loop 

lo_rs.fields.Item(「notes」)。值總是被截斷爲300個字符。我想閱讀這個領域w/out限制。

請指教。提前致謝!

+0

就像一個實驗上傳一個文件,其中第一行有超過300個字符的字段,我認爲這可能是一個與自動數據類型的東西的問題..挖你... ;-) – gordatron

回答

1

我認爲這個問題可能與自動數據類型設置有關,jet將採樣csv中的行並創建一個記錄集以適合..如果它所採樣的行是< 300個字符,它將不會給您足夠的空間。

我認爲你可以改變,使其分析更多行的註冊表項,此鏈接在談論的Excel,但我認爲其相關:

http://support.microsoft.com/kb/281517

可能是錯的..它不是我曾經體驗過我自己。

從文章:

「爲TypeGuessRows密鑰值的有效範圍是0到16。然而,如果該值爲0,掃描源的行數爲16384。請注意,一如果源文件非常大,零值可能會導致性能下降。「

要查看這是否是問題,最好的測試是打開一個CSV,其中第一行包含超過300個字符。

如果這是問題,我首選的解決方案是在填充之前指定記錄集的列類型,但我沒有在這裏設置測試是否可能抱歉。儘管如此,我還是會看一些參考資料。

+0

作爲破解是的,我已經與經典的ASP工作;-))你可以在開始的時候自己在一大排你自己,然後在讀取數據時跳過它。或者你可以在羣體之前配置記錄集(我不記得是否可行在經典的ASP) – gordatron

+0

謝謝,我會嘗試解決方案。 – jeff

+0

嗨gardatron,我試圖編輯註冊表「TypeGuessRows」並將其更改爲「十六進制」,但問題仍然存在。 csv由30列組成,包含大量文本值的「音符」位於第30個位置,我應該在1-16位置範圍內更改音符的位置,因爲您說的是黑客?非常感謝! – jeff