2014-12-11 84 views
0

我有下面的代碼,不會更新記錄。有問題的數據顯示在DataGridView中,所以我知道我正在連接到數據庫,沒有任何問題。如果有人看到這個問題有什麼問題,請讓我知道,我一直在關注它一段時間,我看不到任何看起來不正確的東西。沒有異常拋出它,什麼都不做。提前致謝。SQL更新不起作用,不知道爲什麼

string strSQLConnectionString = "Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|\\dbase.mdf;Integrated Security=True"; 
     string strUpdateCommand = "UPDATE table1 SET Active = @Active WHERE Order = @Order"; 
     SqlConnection connection = new SqlConnection(strSQLConnectionString); 
     SqlCommand updateCommand = new SqlCommand(strUpdateCommand, connection); 
        connection.Open(); 
        updateCommand.Parameters.AddWithValue("Order", "1"); 
        updateCommand.Parameters.AddWithValue("@Active", "True"); 
        updateCommand.ExecuteNonQuery(); 
        connection.Close(); 
        updateCommand.Parameters.Clear(); 

在實際的代碼中,有一個try/catch以connection.open開始,並以parameters.clear結尾。 再次感謝您的幫助。 erik

編輯 @Rahul Singh感謝您的回覆,並鏈接到博客。您在添加缺少的「@」時建議的更改無法解決問題。相反,我現在得到的是在執行查詢行上的「連接未打開,連接必須打開」異常。我把你的建議對使用塊(感謝!)和修改後的代碼

    using (SqlConnection connection = new SqlConnection(strSQLConnectionString)) 
        { 
         using (SqlCommand updateCommand = new SqlCommand(strUpdateCommand, connection)) 
         { 
          updateCommand.Parameters.AddWithValue("@Order", "1"); 
          updateCommand.Parameters.AddWithValue("@Active", "True"); 
          updateCommand.ExecuteNonQuery(); 
         } 
        } 

奇怪的是,如果我明確地說「connection.open()」和「的Connection.close();」那麼我不會得到這個錯誤,但是,再一次,沒有任何事情可以完成。謝謝你的進一步幫助,我正要在頭皮上劃一個洞,在頭皮上劃一個洞。

+0

您需要仍然打開連接。請添加'connection.open()'作爲SqlCommand的'using'塊內的第一行,不需要關閉連接。 – 2014-12-11 12:41:18

+0

好吧,我這樣做了,但現在我們回到了'沒有完成'的桌子上。我甚至刪除了參數,只做了一個直接更新(即「update table1 set active ='true'where order ='1'」;)並沒有發生任何事情 - 甚至沒有發生異常。 我開始懷疑我是否確實沒有連接到數據庫。字段名稱是正確的,我使用相同的連接字符串填充datagridview,因爲我在這裏,我不知道還有什麼要檢查。 – user2201221 2014-12-11 13:38:47

+0

最好的方法是啓動一個'SQL Server Profiler'並檢查正在執行的查詢。檢查一下並讓我知道。 – 2014-12-11 13:41:21

回答

2

,因爲你在下面一行缺少@: -

updateCommand.Parameters.AddWithValue("@Order", "1"); 

參數應恰好與查詢相匹配。另外,請閱讀blog關於「我們能否停止使用AddWithValue」。

此外,您應該使用代碼using塊來自動處理昂貴的資源。類似這樣的: -

using(SqlConnection connection = new SqlConnection(strSQLConnectionString) 
{ 
    using(SqlCommand updateCommand = new SqlCommand(strUpdateCommand, connection) 
    { 
     //Your code goes here. 
    } 
} 
+1

謝謝@Rahul!一定要看幾十遍。 – user2201221 2014-12-15 19:43:26

相關問題