0

私の Sqlite テーブルには 50 行が必要です。プログラムを初めて実行し、Firefox ビューアーでテーブルを確認すると、50 行が表示されます (本来あるべき姿)。

プログラムをもう一度実行してテーブルを確認すると、行が 2 倍になっています。つまり、100 行になりました。(これが問題です)

DELETE を使用する提案がありましたが、デバッグ目的でプログラムを実行した後、Firefox ビューアーでテーブルを表示したいので、テーブルを削除したくありません。

 // We use these three SQLite objects:
          SQLiteConnection sqlite_conn;
          SQLiteCommand sqlite_cmd;

          // create a new database connection: 
          sqlite_conn = new SQLiteConnection(@"Data Source=database.db;Version=3;");

          // open the connection:
          sqlite_conn.Open();

          // create a new SQL command:
          sqlite_cmd = sqlite_conn.CreateCommand();

          // Let the SQLiteCommand object know our SQL-Query:
          sqlite_cmd.CommandText = "CREATE TABLE IF NOT EXISTS 'tab1' (Seq text, Field text, Desc text, Len text, Dec text, Typ text, Percnt text, Pop text, Alzero text, MaxLen text );";

          // Now lets execute the SQL                                                                                 
          sqlite_cmd.ExecuteNonQuery();

          // **** SQLITE TRANSFER SECTION 1 - transfer values from list to table *****

          sqlite_cmd.CommandText = "INSERT INTO tab1 (Seq, Field, Desc, Len, Dec, Typ, Percnt, Pop, Alzero, MaxLen) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10)";
          sqlite_cmd.Parameters.AddWithValue("@p1", 6);  // dummy initial values 
          sqlite_cmd.Parameters.AddWithValue("@p2", 878); 
          sqlite_cmd.Parameters.AddWithValue("@p3", 56);
          sqlite_cmd.Parameters.AddWithValue("@p4", 6);
          sqlite_cmd.Parameters.AddWithValue("@p5", 546);
          sqlite_cmd.Parameters.AddWithValue("@p6", 565);
          sqlite_cmd.Parameters.AddWithValue("@p7", 568);
          sqlite_cmd.Parameters.AddWithValue("@p8", 526);
          sqlite_cmd.Parameters.AddWithValue("@p9", 586);
          sqlite_cmd.Parameters.AddWithValue("@p10", 526);


          for (int i = 0; i < NumListValues; i += 10) // Filling SQlite table rows and columns with values from our list 
          {

              sqlite_cmd.Parameters.AddWithValue("@p1", list[i]);
              sqlite_cmd.Parameters.AddWithValue("@p2", list[i+1]);
              sqlite_cmd.Parameters.AddWithValue("@p3", list[i+2]);
              sqlite_cmd.Parameters.AddWithValue("@p4", list[i+3]);
              sqlite_cmd.Parameters.AddWithValue("@p5", list[i+4]);
              if (i > 490)
                  break; 
              sqlite_cmd.Parameters.AddWithValue("@p6", list[i+5]);
              sqlite_cmd.Parameters.AddWithValue("@p7", list[i+6]);
              sqlite_cmd.Parameters.AddWithValue("@p8", list[i+7]);
              sqlite_cmd.Parameters.AddWithValue("@p9", list[i+8]);
              sqlite_cmd.Parameters.AddWithValue("@p10", list[i+9]);
              sqlite_cmd.ExecuteNonQuery();

          }
4

2 に答える 2

1

スクリプトは、最初に呼び出したときにテーブルを作成し、レコードを挿入します。

CREATE TABLE IF NOT EXISTS2回目に呼び出すと、句を使用しているため、テーブルを再作成していません。しかし、まだテーブルにレコードを挿入しています!

スクリプトを 3 回呼び出すと、150 行になります。

于 2013-11-05T16:19:25.483 に答える
1

プログラムをもう一度実行してテーブルを確認すると、行が 2 倍になっています。つまり、100 行になりました。

ええ、そうでしょう。テーブルが存在しない場合はテーブルを作成すると言いましたが、既に存在するものを削除せずに、大量のデータを挿入しています。

実際には毎回 2 倍になるわけではありませんNumListValues / 10。実行するたびに行が追加されるだけです。

挿入を開始する前に (つまり、実行の最後ではなく最初に) テーブルから既存の行を削除する場合は、明示的に削除する必要があります。TRUNCATE TABLEまたはのいずれかを使用できますDELETE FROM ...

于 2013-11-05T16:19:55.107 に答える