SQL C# 函数中的 COALESCE UPDATE

SQL COALESCE UPDATE in C# function

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

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 服务器中的 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 服务器中的实际 NULL 值。