2010-12-16 63 views
0

我有一個C#項目中的SQL Server數據庫。SQL Server數據庫不會刪除記錄

我使用連接字符串來連接它..我可以使用方法ExecuteNonQuery插入數據,沒有問題。

但是,當我刪除,它只是暫時刪除它,只要我重新啓動應用程序它回滾刪除..任何想法?

PS:我在直接查詢中測試了字符串,並且在那裏工作得很好。

public void executeNonQuery(string input) 
{ 
    db.Open(); 
    SqlCommand cmd = new SqlCommand(input, db); 
    cmd.ExecuteNonQuery(); 
    db.Close(); 
} 

編輯:缺失CODE:

private void buttonSletPost_Click(object sender, EventArgs e) 
    { 
     if(dataGridView1.GetCellCount(DataGridViewElementStates.Selected)>0){ 
      for (int i = 0;i < dataGridView1.GetCellCount(DataGridViewElementStates.Selected); i++) 
      { 
       String str1 = String.Format("WARNING about to DELETE:\n {0} \n BE CAREFULL NO TURNING BACK NOW!", Regnskab.getInstance().dbSelectPostID(dataGridView1.SelectedCells[i].Value.ToString())[0].ToString()); 
       if (MessageBox.Show(str1, "Confirm Deletion", MessageBoxButtons.YesNo) == DialogResult.Yes) 
       { 

        string str = String.Format("DELETE FROM PostTable WHERE PostID={0}", dataGridView1.SelectedCells[i].Value.ToString()); 
        Database.getInstance().executeNonQuery(str); 
        Console.WriteLine(str); 
       } 
      } 
     }else {MessageBox.Show("No cells selected");} 
    } 

哪位能給下面的輸出:在app.config中

DELETE FROM PostTable WHERE PostID=7 

連接字符串:

<connectionStrings> 
    <add name="EndProject.Properties.Settings.DBtestConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DBtest.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" providerName="System.Data.SqlClient" /> 


private Database() 
{ 
     string connStr = ConfigurationManager.ConnectionStrings["EndProject.Properties.Settings.DBtestConnectionString"].ConnectionString; 
     db = new SqlConnection(connStr); 
} 

然後我打開並關閉它,所以連接不是每次打開。

說實話:

我並不確切地知道在哪裏看到我的數據庫信息,這裏是從VS2010性質一些信息。

提供:.NET Framework數據提供程序SQL Server

類型:Microsoft SQL Server的

安德魯的第三:我想是因爲我在我的DataGridView重新加載信息,他們被暫時刪除,並從那裏走了。但後來當我關閉應用程序,並重新啓動它,它回來了...

另外我剛剛與VS2010的服務器瀏覽器進行了檢查,做了一個「顯示數據」後刪除(之前關閉),它wasn不會刪除。

但我現在完全無能爲力。 :-(

+1

您能否提供您用於刪除表格或數據庫的代碼? – 2010-12-16 21:10:29

+1

您是否正在使用Visual Studio,並且正在監督您已將「複製到輸出目錄」設置爲「始終複製」或「如果新的複製」? (雖然這與你的陳述相矛盾,即插入沒有問題 - 但無論如何都要檢查)。 – Olaf 2010-12-16 21:11:34

+2

我希望看到1)你在創建和處理連接的位置(我希望你沒有緩存它或者爲多個命令保留它)2)確切地說你正在使用什麼SQL 3)是什麼讓你認爲行是'暫時被刪除'4)是什麼讓你認爲他們'回滾' – 2010-12-16 21:12:43

回答

0

好吧,它明顯是我誤解插入部分... 有人建議,我是因爲每次運行應用程序時創建的Visual Studio數據庫。 所以我安裝了MS SQL 2008 R2。創建一個具有相同佈局的新數據庫。 改變了連接字符串 而wuupti佑似乎工作,生病回來這個線程,如果它以後壞了.. 但刪除+插入兩個工作大大現在:-)

感謝所有誰試圖幫助!

3

許多應用程序使用Transactions來管理數據庫連接。SQL Server的默認情況下不這樣做,但在應用程序中的其他因素,可以這樣做。

此外,如果你真的這樣做會,並且您的輸入來自用戶界面,我迫不及待地向您介紹Little Bobby Tables

+0

嘿嘿,這可能是一個問題,因爲注意到我.. 更多驗證的方式;-) 你能告訴我什麼其他因素在我的應用程序可以做到這一點... 而不會插入也回滾,如果它是交易,因爲我使用相同的方法來做到這一點? – 2010-12-16 21:40:16

+0

如果您在我的評論中添加了我請求的信息,我們可能會告訴您。這實際上並不足以防止大部分猜測。需要更多的輸入... – 2010-12-16 21:48:40

+0

它現在在那裏 而它的非交易,我已經通過嘗試這樣做了下面的檢查。如果是的話,它也應該回滾我的插入。 – 2010-12-16 22:25:47

0

您描述的行爲聽起來像是自動提交已關閉。請嘗試以下操作,查看記錄是否保留已刪除:

public void executeNonQuery(string input) 
{ 
     db.Open(); 
     using (var txn = db.BeginTransaction()) 
     { 
      SqlCommand cmd = new SqlCommand(input, db); 
      cmd.Transaction = txn; 
      cmd.ExecuteNonQuery(); 
      db.Close(); 
      txn.Commit(); 
     } 
} 
+0

附加信息:當分配給該命令的連接處於未決的本地事務中時,ExecuteNonQuery需要該命令進行事務。該命令的Transaction屬性尚未初始化。 ------------------------------------------------- ------------------- 似乎沒有交易 – 2010-12-16 21:46:22

+0

cmd.Transaction = txn; – 2010-12-17 00:51:18

0

使用SQL Server Profiler運行跟蹤並捕獲在數據庫上執行的實際T-SQL語句。

這是最簡單的解決方案。