2012-02-10 4 views
0

SQLite 백엔드에 데이터를 저장하는 VB.Net 응용 프로그램을 만들고 있습니다. 데이터는 사용자가 가져올 수있는 Excel 워크 북으로 제공됩니다. 각 통합 문서에는 하나의 워크 시트 (약 30,000 개의 행)가 있으며이 테이블은 조금씩 수정되어 새 테이블로 가져옵니다. 이 작업을 수행하는 가장 효율적인 방법은 무엇입니까?VB.Net의 SQLite db로 Excel 데이터를 가져 오는 효율적인 방법

저는 현재 Excel에서 2D 배열로 전체 범위를 읽고 있습니다. 이 배열의 행을 반복하고 각 행을 매 1,000 행마다 실행되는 긴 SQL 문에 추가합니다. 하지만이 작업은 배열 비트를 반복하면서 SQLite 단계로 진행하는 데 어려움을 겪습니다. 나는 이것을 할 수있는보다 효율적인 수단이 있어야한다고 생각하지만 도움을 줄 수는 없다.

감사합니다, 아래

코드 : '먼저 XLS의 reformater 책을 열고 우리의 데이터 Excel.Worksheet으로

Excel.Workbook 희미한 xlWorkSheet으로 새로운이 Excel.Application 희미한 xlWorkBook으로 희미한 xlApp 읽어
xlWorkBook = xlApp.Workbooks.Open(strFile) 
    xlWorkSheet = xlWorkBook.Worksheets("ToDSS") 

    Dim r As Excel.Range = xlWorkSheet.UsedRange 
    Dim array(,) As Object = r.Value(Excel.XlRangeValueDataType.xlRangeValueDefault) 

    xlWorkBook.Close() 
    xlApp.Quit() 

    releaseObject(xlApp) 
    releaseObject(xlWorkBook) 
    releaseObject(xlWorkSheet) 

    SQLconnect.Open() 
    SQLcommand = SQLconnect.CreateCommand 

    'now loop through the rows inserting each into the db 

    Dim curDate As Date 

    strSQL = "" 
    Dim batch As Integer = 0 

    For row As Integer = 16 To array.GetUpperBound(0) 
     strSQL += "INSERT INTO scenario_" & strScenarioName & " VALUES ('" 
     curDate = array(row, 1) 
     strSQL += curDate.ToString("yyyy'-'MM'-'dd") + "'" 

     For col = 2 To 30 
      strSQL += ", " & array(row, col) 

     Next 
     strSQL += ");" & vbCrLf 

     If batch > 1000 Or row = array.GetUpperBound(0) Then 
      Debug.Print(Str(row)) 
      SQLcommand.CommandText = strSQL 
      SQLcommand.ExecuteNonQuery() 
      Debug.Print("pushed") 
      strSQL = "" 
      batch = 0 
     Else 
      batch += 1 
     End If 

    Next 
    SQLcommand.Dispose() 
    SQLconnect.Close() 

답변

0

CSV 형식으로 내보내고 대량로드를 사용합니다.

+0

이것은 작동 할 수도 있습니다. 나는 대량로드에 익숙하지 않고 sqlite 및 VB.Net과 관련하여 참조를 찾을 수 없다. 감사합니다. –

+0

참조 http://stackoverflow.com/questions/928873/how-do-i-bulk-insert -with-sqlite – Chriseyre2000

0

아마도 약간 둥근 정도지만 Excel 대신 Access로 파일을 가져온 다음 SQLite로 내보낼 수 있습니다.

SQLite는 대한 ODBC 드라이버가있다 :

http://www.ch-werner.de/sqliteodbc/

당신이 SQLite는 Access에서 내보낼 수있는 사용. 다음은 GUI에서 수행하는 예제입니다. 내 기본 가정은 프로그래밍이 가능하거나 (아마도 VBA에서) 자동화 될 수 있습니다.

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

나는 당신에게 최소한의 서식 옵션을 줄 것이다 가정하지만 그 일의 비교적 깨끗한 (즉시) 방법이 될 것이다. 드라이버는 오픈 소스이므로 C에서 충분히 능숙한 경우 확장 할 수 있습니다.

+0

이것은 데이터가 기본적으로 Excel 형식이므로 최종 사용자가해야 할 일입니다. 먼저 액세스를 통해가는 것은 약간의 고통이 될 것입니다. –

+0

불행히도 이보다 더 쉬운 방법을 찾을 수 없었습니다. 내가 아직 수행하지 않은 유일한 작업은 그것을 자동화하는 것입니다. 제가 일하는 곳에서 우리는 업계에서 분명히 알고있는 많은 데이터 덤프를 수행하는 CAD 모델러가 있습니다. 데이터는 유행에 관한 라운드에서 오라클에 전달됩니다. 그것은 주위에 꽤 큰 엉망이다. – Max

+0

.Net 웹 응용 프로그램을 코딩하여 Excel 스프레드 시트를 SQL 데이터베이스로 가져온 다음이 코드가 SQLite 데이터베이스와 상호 작용하여 데이터를주고 받지만 Excel 셀의 캐리지 리턴과 관련된 주요 문제가 있습니다. 웹 서비스는 LF와 교환하여 CRLF를 제거합니다. Excel은 각 LF를 새 셀에 이식하는 것을 좋아하므로 제대로 작동 시키려면 약간 까다 롭습니다. 특히 셀이 레코드 끝에 LF가 필요합니다. – htm11h

관련 문제