2012-01-24 50 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
  • 看是否有在桌子上,它做什么
  • 看看是否有任何其他进程正在改变同桌
  • 看到一个触发器如果应用程序在运行