2009-10-18 2 views
0

SQLite 오류가 발생했습니다. 내 프로그램에서 insert 문을 실행할 때 명령에 제공되는 매개 변수가 충분하지 않습니다. 그러나, 두 개의 다른 테이블에 데이터를 연속적으로 삽입하려고 시도하는 경우에만 축소됩니다. 의미는 하나에 데이터를 삽입하고 USING 문을 사용하고 있기 때문에 메서드의 모든 부분이 흐려집니다.C# SQLite error 명령에 제공된 매개 변수가 충분하지 않습니다.

하나의 테이블에 데이터를 삽입하고 디버깅을 중지하고 내 솔루션을 다시 작성한 다음 다른 테이블에 삽입하면이 오류가 발생하지 않습니다.

누구든지 아이디어가 있습니까? 마찬가지로 모든 것은 문장으로 캡슐화되어 있으므로 메모리에 무엇이 들어 있는지 알지 못합니다.

public static void SQLiteTableINSERT(string tableName) 
    { 
     using (SQLiteConnection Conn = new SQLiteConnection(SQLiteConn.Conn)) 
     { 
      using (SQLiteTransaction sqliteTrans = Conn.BeginTransaction()) 
      { 
       using (SQLiteCommand cmd = Conn.CreateCommand()) 
       { 
        cmd.CommandText = PrepareInsert(tableName); 

        for (int i = 0; i < LocalDataSet.LocalDs.Tables[0].Rows.Count; ++i) 
        { 
         foreach (DataColumn col in LocalDataSet.LocalDs.Tables[0].Columns) 
         { 
          string temp = LocalDataSet.LocalDs.Tables[0].Rows[i][col, DataRowVersion.Current].ToString(); 
          cmd.Parameters.AddWithValue("@" + col.ColumnName, temp);         
         } 

         cmd.ExecuteNonQuery();       
        }       
       } 

       sqliteTrans.Commit(); 
      } 
     } 

     SQLite.SQLiteConn.Conn.Close(); 
    } 

어떤 아이디어가 좋은 것 :

여기 내 방법입니다. 감사합니다. .

답변

0

테이블에 동일한 스키마가 없다고 가정 할 때 루프에서 tableName을 사용해야한다고 생각합니다.

명령은 이름 TABLENAME와 테이블을 준비하고 있지만 추가하는 PARAMS [0], 시도 테이블에서 항상 테이블 [TABLENAME이 경우 문자열 TABLENAME에서

+0

는 사실 때문에 미스가 주도 가져 오는 Excel 파일의 이름. 나는 실제 데이터 세트 TableName을 아무 것도 설정하지 않았다. 그래서 나는 단지 인덱스를 사용한다. 이것은 사물의 거대한 계획에서 정말로 중요합니까? – Nathan

관련 문제