c# - C# 函数中的 SQL COALESCE UPDATE

标签 c# sql-server methods coalesce

我在 C# 中有一个函数,我想更新我的数据库。这连接到带有文本框的窗口窗体。我想确保如果有人只想更新一个或两个值,其余的不会被空字符串替换,而是保留已经存在的内容。

sqlStr = "UPDATE [CRONUS Sverige AB$Employee] SET [First Name] = COALESCE(@param2, [First Name]), [Last Name] = COALESCE(@param3, [Last Name]), " +
    "[Address] = COALESCE(@param4, [Address]), [E-Mail] = COALESCE(@param5, [E-Mail]), [Social Security No_] = COALESCE(@param6, [Social Security No_]) WHERE [No_] = @param1";

sqlCom = new SqlCommand(sqlStr, con);
sqlCom.Parameters.AddWithValue("@param1", id);
sqlCom.Parameters.AddWithValue("@param2", fName);
sqlCom.Parameters.AddWithValue("@param3", lName);
sqlCom.Parameters.AddWithValue("@param4", adress);
sqlCom.Parameters.AddWithValue("@param5", email);
sqlCom.Parameters.AddWithValue("@param6", ssn);
sqlCom.ExecuteNonQuery();

问题是,如果我现在尝试在例如 fName 中输入一个空值,我会得到这个错误:

System.Data.SqlClient.SqlException (0x80131904): The parameterized query '(@param1 nvarchar(2),@param2 nvarchar(4000),@param3 nvarchar(11)' expects the parameter '@param2', which was not supplied.

关于如何解决这个问题的任何想法?我非常感谢所有帮助:)。

最佳答案

这里的问题是 C# 中的 null 值与 SQL Server 中的 NULL 值不同。这里的一种选择可能是在添加参数时使用空合并运算符 ??,例如

sqlStr = "UPDATE [CRONUS Sverige AB$Employee] SET [First Name] = COALESCE(@param2, [First Name]), [Last Name] = COALESCE(@param3, [Last Name]), " +
    "[Address] = COALESCE(@param4, [Address]), [E-Mail] = COALESCE(@param5, [E-Mail]), [Social Security No_] = COALESCE(@param6, [Social Security No_]) WHERE [No_] = @param1";

sqlCom = new SqlCommand(sqlStr, con);
sqlCom.Parameters.AddWithValue("@param1", ((object)id) ?? DBNull.Value);
sqlCom.Parameters.AddWithValue("@param2", ((object)fName) ?? DBNull.Value);
sqlCom.Parameters.AddWithValue("@param3", ((object)lName) ?? DBNull.Value);
sqlCom.Parameters.AddWithValue("@param4", ((object)adress) ?? DBNull.Value);
sqlCom.Parameters.AddWithValue("@param5", ((object)email) ?? DBNull.Value);
sqlCom.Parameters.AddWithValue("@param6", ((object)ssn) ?? DBNull.Value);
sqlCom.ExecuteNonQuery();

上面修改后的逻辑现在会将 C# 中的 null 值映射到 SQL Server 中的实际 NULL 值。

关于c# - C# 函数中的 SQL COALESCE UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54960009/

相关文章:

java - 类型中的方法不适用于参数

c# - 将 JavaScript 菜单放入 Asp.Net 页面时出现问题

c# - 从 3.4 alpha 升级到 Microsoft.IdentityModel.Clients.ActiveDirectory 3.10

sql-server - 不正确的语法 : Create Procedure must be the only statement in the batch

sql-server - 如何计算出存储过程返回了多少数据?

objective-c - 模拟Objective C中的抽象类和抽象方法?

c# - “Invalid window handle” 使用 C# .net 框架 4.7.2 中的 FileOpenPicker 和 Microsoft.Windows.SDK.Contracts 而没有 UWP 时出现错误

c# - 为什么 List<T> 在协变接口(interface) MyInterface<out T> 上无效

sql - cfquery 文本编码问题

scala - 以不同的方式链式运作