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