C#函数中的SQL合并更新

C#函数中的SQL合并更新,c#,sql-server,methods,coalesce,C#,Sql Server,Methods,Coalesce,我在C#中有一个函数,我想更新我的数据库。这已连接到带有文本框的windows窗体。我想确保如果有人只想更新一个或两个值,其余的不会被空字符串替换,而是保留已经存在的值 sqlStr = "UPDATE [CRONUS Sverige AB$Employee] SET [First Name] = COALESCE(@param2, [First Name]), [Last Name] = COALESCE(@param3, [Last Name]), " + "[Address] =

我在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中的
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
值。

。。。