2016-05-19 33 views
0

我有一個sqlite數據庫文件。我爲Sqlite使用DB Browser作爲客戶端。我進去並在大部分桌子上從命令中運行刪除。此後,我嘗試導出使用選項數據庫到SQL文件我注意到我的所有數據都出現在它。我想知道爲什麼數據沒有被刪除?我知道sqlite文件的大小不會縮小。從命令中刪除不在sqlite中工作?

以下是我的代碼片段。

string str = @"Data Source=" + userFilePath + "\\mysqlite.sqlite3"; 
        using (SQLiteConnection con = new SQLiteConnection(str)) 
        { 
         con.Open(); 
         SQLiteTransaction trans = con.BeginTransaction(); 
         try 
         { 


          String cmdSelect1 = "Select * from table1 where companyID='" + companyID + "' And month='" + month + "' And year='" + year + "'"; 
          int fiscalPeriod = Convert.ToInt32(monthNumber); 
          int financialYear = Convert.ToInt32(itemvalueyear); 
          using (SQLiteCommand cmd1 = new SQLiteCommand(cmdSelect1, con, trans)) 
          { 
           SQLiteDataReader dr1 = cmd1.ExecuteReader(); 

           if (dr1.Read()) 
           { 

            MessageBoxResult messageBoxResult = System.Windows.MessageBox.Show("Records Already Exist ? Are you confirm replace it?", "Delete Confirmation", System.Windows.MessageBoxButton.YesNo); 
            if (messageBoxResult == MessageBoxResult.Yes) 
            { 

             String deleteTable = "Delete from table1 where companyID='" + companyID + "' And month='" + month + "' And year='" + year + "'"; 
             using (SQLiteCommand cmdDeleteTb1 = new SQLiteCommand(deleteTable, con, trans)) 
             { 
              cmdDeleteTb1.ExecuteNonQuery(); 
              cmdDeleteTb1.Dispose(); 
             } 
             foreach (object line in linesC) 
             { 
              if (line.GetType() == typeof(TypeC)) 
              { 

               String cmdText2 = "INSERT INTO table1(tbID,companyID,month,year) VALUES(@tbID,@companyID,@month,@year)"; 
               using (SQLiteCommand cmd = new SQLiteCommand(cmdText2, con, trans)) 
               { 

                cmd.Parameters.AddWithValue("@tbID", tbID); 
                cmd.Parameters.AddWithValue("@companyID", companyID); 
                cmd.Parameters.AddWithValue("@month", month); 
                cmd.Parameters.AddWithValue("@year", year); 
                cmd.ExecuteNonQuery(); 
                cmd.Parameters.Clear(); 
                cmd.Dispose(); 
               } 
              } 
             } 

            } 
           } 


           dr1.Close(); 
           cmd1.Dispose(); 
          } 
          trans.Commit(); 

          MessageBox.Show("Successfully Inserted Into Database"); 
         } 
         catch (Exception ex) 
         { 
          MessageBox.Show("Rollback " + ex.ToString()); 
          trans.Rollback(); 
         } 

         con.Close(); 
         con.Dispose(); 



         GC.Collect(); 

回答

1

確定:

您似乎在開始的兩個交易。在開始刪除之後,開始插入循環。

提交您的刪除事務,然後再提交您的插入。

這是在開始兩個事務之後提交的。

+0

發佈您的代碼,如果這不起作用 – EoinS

+0

我已更新我的問題與我的代碼段。我不確定在執行交易時將最終確定的位置放在哪裏。但最後我con.close(),我甚至不得不運行GC.collect否則我也傾向於得到一些錯誤。請諮詢我缺少的東西? – user5313398

+0

對此進行了研究並在看到您的代碼與您的Sql更具體的類似之處。 – EoinS