2013-02-26 9 views
6

글쎄, SQLite를 사용하고 있지만, 아마도 10k + 명령어 [.sql 파일]가 아닌 쿼리를 실행하기 시작할 때. 데이터베이스에 정보를 추가하는 데 최대 10 분 이상이 걸릴 수 있다는 것은 매우 느립니다.SQLite 매우 느리게 ExecuteNonQuery

어쨌든 이것은 내 ExecuteNonQuery 코드입니다.

public int ExecuteNonQuery(string sql) 
{ 
    var cnn = new SQLiteConnection(_dbConnection); 
    cnn.Open(); 
    var mycommand = new SQLiteCommand(cnn) {CommandText = sql}; 
    int rowsUpdated = mycommand.ExecuteNonQuery(); 
    cnn.Close(); 
    return rowsUpdated; 
} 

마무리하는 데 몇 초가 걸릴 수 있기를 바랍니다.

+2

아마도 귀하의 문제는 귀하의 질문에 있습니까? – Fox32

+2

. 그것은 매우 간단하기 때문에 .sql 스크립트에서 INSERT INTO CMDS가 의심됩니다. –

+1

begin-commit 문으로 묶었습니까? –

답변

4

SQLite를 사용하면 wrap insert-update-delete 명령이 트랜잭션에서 발생합니다. 그렇지 않으면 매우 느려질 것입니다. .NET 데이터 공급자에 내장 된 트랜잭션 지원을 사용하거나 첫 번째 줄을 만들 수있는 .sql 파일을 읽고 있으므로 begin transaction 및 마지막 줄인 commit transaction을 사용할 수 있습니다. 어느 쪽이든 작동해야합니다.

.sql 파일에서 수행하려는 경우 다음과 같이 표시 될 수 있습니다.

begin transaction; 

insert into ...; 
update ...; 
delete ...; 

commit transaction; 

코드로 작성하면 다음과 같이 보입니다.

public int ExecuteNonQuery(string sql) 
{ 
    var cnn = new SQLiteConnection(_dbConnection); 
    cnn.Open(); 
    var transaction = cnn.BeginTransaction(); 
    var mycommand = new SQLiteCommand(cnn) {CommandText = sql}; 
    mycommand.Transaction = transaction; 
    int rowsUpdated = mycommand.ExecuteNonQuery(); 
    transaction.Commit(); 
    cnn.Close(); 
    return rowsUpdated; 
} 
+0

위 코드를 사용하면 답변을 수정할 수 있습니다. 왜냐하면 나는 트랜잭션을 시작하고 .sql 파일에 라인을 추가했기 때문에 SQL 로직 에러 –

+0

은 .sql 파일의 시작과 끝 라인에 그 라인을 추가했지만, 아무것도하지 않는다는 것을 알게된다. 그렇지 않으면 쿼리 지금 얼어 붙었 어. –

+0

@RuneS : 흠 ... 그건 내가하는 방식과 정확히 일치하기 때문에 이상합니다. sqlite에서 처음으로 얻은 오류는 무엇입니까? –

관련 문제