C# SQL更新不工作

C# SQL更新不工作,c#,sql,C#,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

我正在尝试使用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;
}

我遗漏了什么?

您应该更改参数添加顺序-对于大多数提供商来说,这很重要

所以不应该是这样

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

    cmd.Parameters.AddWithValue("@name",name);
    cmd.Parameters.AddWithValue("@id", id);
一般规则:调用
cmd.Parameters.AddWithValue的顺序应与查询中参数出现的顺序相同。

  • 查看您连接的数据库是否是正确的数据库,而不是测试或其他什么,服务器是否也是如此
  • 将查询重写为

    UPDATE person SET name = @name where id = @id; 
    IF @@ROWCOUNT = 0 
      RAISERROR('No rows updated', 16,1)
    
  • 检查是否存在一些空的
    尝试。。。调用堆栈中的catch{}

  • 查看不同模式中是否存在其他
    person
  • 看看桌子上是否有触发器,以及它的作用
  • 查看是否有其他进程正在更改同一个表
  • 查看应用程序在运行时是否遇到此代码

连接()的功能是什么?您得到了什么错误或异常?您可以在SSMS中运行该命令吗?可能是因为您试图更新的记录不存在。SQL Server不仅仅忽略您的命令,它要么按照您的要求执行,要么抱怨无法执行。更重要的是。。。在数据库上实际执行的是什么?运行探查器,查看什么查询会命中数据库。正如@Yuck所建议的,手动运行相同的查询,看看会发生什么。我们可以看到的代码没有任何错误。因此,要么它根本没有运行,要么你正在吞咽连接错误,要么你认为你正在更新的记录很可能没有。你能把connect()的代码片段放进去吗?对于ADO.NET来说,顺序并不重要。仍然一样,我没有发现任何错误,所以如果可能的话,我似乎正在更新另一个数据库?@dumbel为什么你会认为它正在更新另一个数据库?@dumbel:我们试图在对这个问题的评论中指出,“什么都没有发生”是一个不准确和误导性的结论。有事情发生了。可能应用程序从未执行过此代码,可能存在代码忽略的异常,可能查询正在更新意外记录,等等,但您必须对其进行调试。从你发布的内容来看,没有明显的错误。问题的根源在问题的代码段之外。谢谢,参数的顺序是我的问题。我不敢相信要求命名参数的顺序是多么愚蠢。