2011-09-14 2 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 자까지 잘립니다. 나는이 필드를 읽고 싶다.

알려 주시기 바랍니다. 미리 감사드립니다!

+0

첫 번째 행의 필드가 300 자 이상인 파일을 업로드하는 실험과 마찬가지로 자동 데이터 유형의 문제가 될 수 있다고 생각합니다. .. 너를 위해 파고 들었다. ;-) – gordatron

답변

1

이 문제는 자동 데이터 유형 설정과 관련이 있다고 생각합니다. jet은 CSV의 행을 샘플링하고 적합하도록 레코드 세트를 만듭니다. 행이 샘플 인 경우 < 300 문자이므로 충분한 공간이 제공되지 않습니다. 난 당신이 더 행을 분석하기 위해 변경할 수있는 레지스트리 키가 있다고 생각

,이 링크는 엑셀 대해 얘기하지만 난 그와 관련된 생각 :

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

잘못 될 수 있습니다 ..이 아니 뭔가를 나는 실제로 자신을 경험했습니다. 문서로부터

:

의 "TypeGuessRows 키 값의 유효 범위의 값이 0 인 경우, 스캔 소스 행 수가 16384 명심 0 16하다는 값이 0이면 소스 파일이 매우 큰 경우 성능이 저하 될 수 있습니다. "

가장 좋은 테스트에서 문제가되는지 확인하려면 첫 번째 행에 300자를 초과하는 CSV 파일을 여는 것이 좋습니다.

이것이 문제가되는 경우 필자가 선호하는 해결책은 채우기 전에 레코드 집합의 열 유형을 지정하는 것이지만 미안한지 테스트하려면 여기에 설정하지 않아도됩니다. 나는 당신을위한 몇몇 참고를 찾을 것이다.

+0

해킹으로 그래, 난 클래식 ASP와 ;-) 작업) 당신은 큰 행에 자신을 처음 퍼지 할 수 후 데이터를 읽을 때 그것을 건너 뜁니다. 아니면 어쩌면 당신은 인구 (나는 기억이 안나요 작동 기억 고전 ASP에서) – gordatron

+0

고마워, 그 해결책을 시도 할게. – jeff

+0

안녕 gardatron, "TypeGuessRows"레지스트리를 편집하고 "16"십진수로 변경하려고했지만 문제가 여전히 발생합니다. csv는 30 개의 열로 구성되며 큰 텍스트 값을 포함하는 "notes"는 30 번째 위치에 있습니다. 해킹을 말하면서 1에서 16 사이의 범위에서 음표의 위치를 ​​변경해야합니까? 고마워요! – jeff

관련 문제