为什么我的Sqlite表加倍自我?

时间:2013-11-05 16:12:28

标签: c# database sqlite

我的Sqlite表应该有50行。当我第一次运行程序,并通过firefox查看器检查表时,我看到50行(应该是这样)。

当我第二次运行程序并检查表时,它的行加倍 - 我现在有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();

          }

2 个答案:

答案 0 :(得分:1)

您的脚本在您第一次调用它时创建表,并插入记录。

第二次调用它时,您没有重新创建表,因为您使用了CREATE TABLE IF NOT EXISTS子句。但是,你仍然在桌面上插入记录!

如果您第三次调用脚本,则会有150行。

答案 1 :(得分:1)

  

当我第二次运行程序并检查表时,它的行是双倍的 - 我现在有100行。

是的,它会的。您已经说过创建表如果它不存在,然后您插入一堆数据,而不删除已存在的那些。

每次实际上它不会加倍 - 每次运行它时只会添加NumListValues / 10行,因为这就是你所说的你想要做的事情。

如果要在开始插入之前删除表中的任何现有行(即在运行的 start 而不是在结尾处),那么您需要明确地这样做。您可以使用TRUNCATE TABLEDELETE FROM ...