Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新SQL中的主键值_C#_Sql - Fatal编程技术网

C# 更新SQL中的主键值

C# 更新SQL中的主键值,c#,sql,C#,Sql,我正在创建一个表单,用其中写入的内容更新SQL数据库。 ClientCode是主键。 我的更新查询如下所示: string query = $@"UPDATE {clientTableName} SET ClientCode = @clientCode, CompanyName = @companyName,

我正在创建一个表单,用其中写入的内容更新SQL数据库。 ClientCode是主键。 我的更新查询如下所示:

string query = $@"UPDATE {clientTableName}
                                SET ClientCode = @clientCode,
                                    CompanyName = @companyName,
                                    Address1 = @address1,
                                    Address2 = @address2,
                                    City = @city,
                                    Province = @province,
                                    PostalCode = @postalCode,
                                    YTDSales = @ytdSales,
                                    CreditHold = @creditHold,
                                    Notes = @notes
                                WHERE ClientCode = @clientCode";
此查询的问题是它将在where原因中选择新的clientCode,这意味着查询将无法选择正确的主键

例如,如果我键入BOTTN,查询将在where-cause中查找BOTTN而不是BOTTM

我怎样才能解决这个问题


您需要区分旧的clientCode和新的clientCode。WHERE子句需要包含旧的clientCode,以便以数据库中的现有行为目标。然后可以更新行,包括新clientCode的值

string query = $@"UPDATE {clientTableName}
                            SET ClientCode = @newClientCode,     -- NEW
                                CompanyName = @companyName,
                                Address1 = @address1,
                                Address2 = @address2,
                                City = @city,
                                Province = @province,
                                PostalCode = @postalCode,
                                YTDSales = @ytdSales,
                                CreditHold = @creditHold,
                                Notes = @notes
                            WHERE ClientCode = @oldClientCode";  -- OLD

从EditDialog的文本框中获取新的客户机代码,并在从数据库检索行时将旧的客户机代码保存为成员变量或其他内容,以便在EditDialog中显示各个字段。

您需要保留主键的上一个值,并将其传入另一个参数,然后使用该参数对于将新值用于集合赋值时的WHERE条件,您能告诉我如何操作吗?当您使用当前数据加载表单时,请将当前主键的值保存在表单全局级别变量的某个位置。然后,当您保存数据时,请为此“当前”值创建一个单独的参数,并修改查询以编写完整答案。我需要查看您是如何使用数据库数据加载表单的。将当前客户端代码作为隐藏或只读字段或类似字段提交。有时确实需要更新主键,是的。虽然可以说有比使用代理键、唯一性约束等更复杂的方法来设计数据库。但是,除非解决方案是企业级的,否则在这种情况下我不会担心。