C#函数中的SQL COALESCE UPDATE

问题描述 投票:1回答:1

我在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):参数化查询'(@ param1 nvarchar(2),@ param2 nvarchar(4000),@ param3 nvarchar(11)'需要参数'@param2',这是未提供的。

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

c# sql-server methods coalesce
1个回答
3
投票

这里的问题是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值。

© www.soinside.com 2019 - 2024. All rights reserved.