2012-01-24 186 views
2

我試圖用SQL命令更新我的數據庫,但它不起作用。SQL更新不起作用

id = primarykey 

public void updateName(int id, string name) 
{ 
    using(var cmd = new SqlCommand("UPDATE person SET name = @name where id = @id", connect())) 
    { 
     cmd.Parameters.AddWithValue("@id", id); 
     cmd.Parameters.AddWithValue("@name",name); 
     cmd.ExecuteNonQuery(); 
    } 
} 

private SqlConnection connect() 
{ 
    string conStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    var c = new SqlConnection(conStr); 
    c.Open(); 
    return c; 
} 

我錯過了什麼?

+5

達到這個代碼是什麼'連接() '做?你會得到什麼錯誤或例外? – Yuck

+0

connect =我在那裏存儲我的連接字符串。我沒有得到任何錯誤。它沒有更新我的記錄。 – dumbel

+1

你可以在SSMS中運行命令嗎?這可能是您嘗試更新的記錄不存在。 SQL Server不會忽略你的命令 - 它要麼做你告訴它的,要麼抱怨它不能。 – Yuck

回答

2

您應該更改參數添加順序 - 對於大多數提供商而言它很重要。

所以應該不會

cmd.Parameters.AddWithValue("@id", id); 
    cmd.Parameters.AddWithValue("@name",name); 

而是

cmd.Parameters.AddWithValue("@name",name); 
    cmd.Parameters.AddWithValue("@id", id); 

一般規則:調用到cmd.Parameters.AddWithValue順序應該是相同的參數occurence的查詢順序。

+2

對於ADO .NET而言,訂單確實不重要。 – Yuck

+0

-1並不總是正確的... –

+0

仍然一樣,即時通訊不gettng任何錯誤,所以它似乎即時更新另一個數據庫,如果這是可能的? – dumbel

2
  • 看看你是否連接DB是正確的數據庫,而不是測試或什麼的,和同爲服務器
  • 重寫查詢作爲

    UPDATE person SET name = @name where id = @id; 
    IF @@ROWCOUNT = 0 
        RAISERROR('No rows updated', 16,1) 
    
  • 檢查是否有存在一些空try ... catch{}在調用堆棧

  • 看是否存在在不同的模式等person
  • 看是否有在桌子上,它做什麼
  • 看看是否有任何其他進程正在改變同桌
  • 看到一個觸發器如果應用程序在運行