2017-12-27 20 views
1

私のsqliteデータベースはC:\program-name\db\db.s3dbに格納されています。 私はテーブルmembersと約70のレコードを持っています。だから今私は、membersテーブルから他のテーブルact_monthly_listingsにすべての口座番号をコピーする必要がある手続きがあります。C#が非常にゆっくりと実行されているSQLiteデータベース

実行中であることを示していますが、それは退屈なほど遅いです。それが私のコードのためかどうかわかりません。ここでは抜粋です:

接続:

ButtonClickコードに
private void SetConnection() 
     { 
      sql_con = new SQLiteConnection 
       ("Data Source=C:\\credit-union\\db\\cu.s3db;Version=3;New=False;Compress=True;"); 
     } 

private void button1_Click(object sender, EventArgs e) 
     { 

     button1.Text = "Working Please Wait"; 
     string init_month = dtInit.Value.Month.ToString(); 
     string init_yr = dtInit.Value.Month.ToString(); 

     SetConnection(); 
     sql_con.Open(); 

     SQLiteCommand cmd = new SQLiteCommand(); 
     cmd.CommandText = "select ec_no from members"; 
     cmd.Connection = sql_con; 

     DR = cmd.ExecuteReader(); 

     int count = 0; 

     while (DR.Read()) 
     { 
      DR.Read(); 
      this.Text = "Account : " + DR.GetInt32(0).ToString(); 
      string SQL = "INSERT INTO act_monthly_listings (year,month,act) VALUES ("+ init_yr + "," + init_month + "," + DR.GetInt32(0).ToString() + ")"; 
      //Clipboard.SetText(SQL) 
      if (ExecuteQuery(SQL)) 
      { 
       count++; 
      } 


     } 

     if(count > 0){ 
      MessageBox.Show("Accounts Initialized!", "Success", MessageBoxButtons.OK,MessageBoxIcon.Information); 
     }else{ 
      MessageBox.Show("Initialization Failed!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     } 
     sql_con.Close(); 
    } 
+0

これは 'while'のためかもしれません。なぜなら、あなたは' INSERT INTO -SELECT 'を使って1つの撮影でそれらをすべてコンパイルしないのですから。 – Aria

+1

'Read()'を2回呼び出すため、うまくいけば1行おきにしか行かないでしょう。 – Crowcoder

答えて

4

ので、あなたのプログラムが非常に遅い実行させる回数を行に等しいinsertクエリを実行しているwhileであることですので、 INSERT INTO-SELECTのように、

 string init_month = dtInit.Value.Month.ToString(); 
    string init_yr = dtInit.Value.Month.ToString(); 
    SQLiteCommand cmd = new SQLiteCommand(); 
    cmd.CommandText = "INSERT INTO act_monthly_listings (year,month,act) select @y,@m,ec_no from members"; 
    cmd.Parameters.Add(new SQLiteParameter("@y", init_yr)); 
    cmd.Parameters.Add(new SQLiteParameter("@m", init_month)); 
    cmd.Connection = sql_con; 
    cmd.ExecuteNonQuery(); 
接続が遅いプーリングプラスあなたは Read回避あたりのクエリを実行していることがあり

1本のシュートに挿入されたすべての行、reader.Read()ポインタがDataReaderは、DBに接続された最後の行に到着するまで、あなたがwhileを使用している間(アライブ接続する必要があります)これは、 あなたは何百万というレコードを持っていて、あなたのコードによって何が起こったとしますか?

+0

魔法のように。ありがとうBro – kingraphaII

+0

あなたは大歓迎です。 – Aria

関連する問題