簡體   English   中英

C#函數中的SQL 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):參數化查詢'(@ param1 nvarchar(2),@ param2 nvarchar(4000),@ param3 nvarchar(11)'需要參數'@param2',這是未提供的。

關於如何解決這個問題的任何想法? 我非常感謝任何和所有的幫助:)。

這里的問題是null在C#中值是不一樣的事,作為一個NULL在SQL Server中的價值。 這里的一個選擇可能是使用空合並運算符?? 添加參數時,例如

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM