2011-12-09 4 views
0

:SQL CE에서 일괄 처리 쿼리를 실행하는 방법은 무엇입니까? 예를 들어

StringBuilder query = new StringBuilder(); 

        foreach (KeyValuePair<string, string> key in list) 
        { 
         string name = key.Key; 
         string emails = key.Value; 
         query.AppendFormat("insert into contacts(name, emails) values('{0}', '{1}');", name, emails); 
        } 

    string queries = query.ToString(); //how to run it? 

이 가능하다?

+0

약간의 오해의 소지가있는 제목 ... 생각 나는 것 목록을 일괄 적으로 삽입하거나 일련의 선택에서 여러 데이터 세트를 가져오고 싶습니까? – Martin

답변

1

루프 전에 트랜잭션을 시작하고 각 명령문을 stringbuilder에 추가하는 대신 실행하고 루프 (또는 n 개의 레코드마다)를 커밋하는 것이 가장 좋습니다.

또한, 당신의 라인을 따라 매개 변수가있는 명령, 뭔가를 사용해야합니다

SqlCeCommand oCommand = conn.CreateCommand(); 
oCommand.CommandText = "insert into contacts(name, emails) values(?, ?)"; 
// I can't remember if the param names need @ or not 
oCommand.Parameters.Add("@name", SqlDbType.VarChar); 
oCommand.Parameters.Add("@email", SqlDbType.VarChar); 

SqlCeTransaction oTrans = conn.BeginTransaction(); 
try { 
    foreach (KeyValuePair<string, string> key in list) { 
    oCommand.Parameters[0].Value = key.Key; 
    oCommand.Parameters[1].Value = key.Value; 
    oCommand.ExecuteNonQuery(); 
    } 
    oTrans.Commit(); 
} catch (Exception ex) { 
    oTrans.Rollback(); 
} 

다른 방법으로는 CodePlex에서 SQL Compact Bulk Insert Library를 사용할 수 있습니다. 나는 이것이 쿼리 프로세서를 우회하여 얻을 수있는만큼 빨리 SqlCeResultSet 위에 TableDirect SqlCeCommand를 사용한다고 믿는다.

+0

윙윙 거리다, 나는 그것을했다, 나는 이것에 대안을 찾고있다. –

+0

추가 옵션으로 업데이트되었습니다. –

1

컴팩트 에디션의 V3.5에서는 지원되지 않는 기능입니다. V4에서 변경된 것인지 확실하지 않습니다.

연결/트랜잭션 및 루핑 열기가 유일한 옵션입니다.

죄송합니다.

+0

변경되지 않았습니다. 아직 지원되지 않습니다. – codekaizen

관련 문제