2011-01-27 3 views
0

CSV 파일을 데이터 세트로 읽는 OLDB 연결이 있습니다. 이제는 CSV에서 3,00 또는 15,00 (유로 값입니다)과 같은 열이 있지만 OdbcDataAdapter .Fill 메서드를 호출하면 값이 DateTime으로 변경됩니다. 이 코드는 내가 CSV를 읽고 데이터 집합으로 변환하는 데 사용할 수 있습니다 :OLDB는 CSV 파일을 읽지 만 값을 변경합니다.

DataSet ds = new DataSet(); 
      try 
      { 
       // Creates and opens an ODBC connection 
       string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + filePath.Trim() + ";Extensions=asc,csv,tab,txt;Persist Security Info=False"; 
       string sql_select; 
       OdbcConnection conn; 
       conn = new OdbcConnection(strConnString.Trim()); 
       conn.Open(); 

       //Creates the select command text 
       sql_select = "select * from [" + this.fileName.Trim() + "]"; 

       //Creates the data adapter 
       OdbcDataAdapter obj_oledb_da = new OdbcDataAdapter(sql_select, conn); 

       //Fills dataset with the records from CSV file 
       obj_oledb_da.Fill(ds, "csv"); 

       //closes the connection 
       conn.Close(); 
      } 
      catch (Exception e) //Error 
      { 
       MessageBox.Show(e.Message, "Error - LoadCSV", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      return ds; 

csv로의 기록은 다음과 같다 : 레코드가 데이터 집합에서받은

2005 2 20 7024 0 0 2900 14 19 0,00 3,00 3,00 0,00 0,00 0,00 15,80 18,80 0,00 0,00 90014 99999998 99999998  0 0 23/02/2005 0 stt  7024 15,80 0,00 N 60376940043 fis 

다음과 같습니다 :

2005 2 20 7024 0 0 2900 14 19 30-12-1899 0:00:00 30-12-1899 15:26:00 30-12-1899 15:26:00 30-12-1899 0:00:00 30-12-1899 0:00:00 30-12-1899 0:00:00 80,33 95,59 30-12-1899 0:00:00 30-12-1899 0:00:00 92705 99999998 99999998  0 0 23-2-2005 0:00:00 0 stt  7024 80,33 30-12-1899 0:00:00 N  fis 

여기에 무엇이 누락 되었습니까? DataSet의 레코드는 CSV 레코드와 정확히 같아야합니다. 모든 별도의 줄을 데이터베이스에 추가하고 싶지 않아 CSV를 DataSet으로 변환해야하므로 데이터베이스에 DataSet을 한 번에 삽입합니다 (가져 오기 모듈 임)

누가이 문제를 도와 드릴 수 있습니까? ?

미리 감사드립니다.

+0

내가 누락 된 파일입니까? 파일을 쉼표로 구분했거나 탭으로 구분 했습니까? 소수점으로 콤마로 쉼표로 구분 된 파일입니까? 그것은 몇 가지 문제를 일으킬 수 있습니다. 파일의 정확한 형식을 게시 할 수 있습니까? – Brett

+0

아마도'.'로 바꾸려면 쉼표가 필요합니다. 이제는 시간으로 해석됩니다. 저의 겸손한 견해. –

+0

죄송 합니다만 언급하지 않았지만 탭 구분 ... ','을 '.'로 빠르게 대체 할 수 있습니다. 코드 또는 메모장 + + 또는 뭔가 그것을 바꿔야합니까? – CyberK

답변

1

실제로 텍스트 드라이버를 사용하여 레코드를 가져 오려는 경우 schema.ini 파일 사용을 고려할 수 있습니다. 나는 제어판에서 지역 설정에 따라 날짜 시간을 가져 생각이이 페이지에 링크 된

http://msdn.microsoft.com/en-us/library/ms709353.aspx

:

http://zootfroot.blogspot.com/2009/04/parse-csv-files-with-ms-odbc-driver.html

수동으로 파일을 구문 분석하는 생각도한다 그러면 날짜 필드를 해석하는 방법을 더 잘 제어 할 수 있습니다.

+0

먼저 답장을 보내 주셔서 감사합니다. 파일을 수동으로 구문 분석하는 데는 많은 시간이 걸립니다. 이제 10 초 안에 170k 레코드를 가져옵니다. 수동으로 처리하면 10 분 이상 걸리므로 고객에게 너무 오래 걸립니다 ... – CyberK

+0

감사합니다 !!! schema.ini에 열을 추가하지 않은 경우 한 번 추가되고 매력처럼 작동하는 필드 유형이 조정되었습니다. – CyberK

관련 문제