如果输入参数不为null,则更新MySql



我目前要实现一个API控制器,它将更新表中的字段,但前提是输入参数不为空。我知道这个话题有很多,我基本上已经尝试过每一种解决方案。

基本上,我想要实现的是,只有当参数不为null时,查询才会更新字段。

我的查询如下:

string query = "UPDATE leads SET " +
"orgNo = IF(?orgNo IS NULL, orgNo, ?orgNo), " +
"companyName = IF(?companyName IS NULL, companyName, ?companyName), " +
"name = IF(?name IS NULL, name, ?name), " +
"telephone = IF(?telephone IS NULL, telephone, ?telephone), " +
"telephone1 = IF(?telephone1 IS NULL, telephone1, ?telephone1), " +
"address = IF(?address IS NULL, address, ?address), " +
"postalCode = IF(?postalCode IS NULL, postalCode, ?postalCode), " +
"city = IF(?city IS NULL, city, ?city), " +
"email = IF(?email IS NULL, email, ?email), " +
"website = IF(?website IS NULL, website, ?website), " +
"callbackDate = IF(?callbackDate IS NULL, callbackDate, ?callbackDate), " +
"status = IF(?status IS NULL, status, ?status), " +
"stage = IF(?stage IS NULL, stage, ?stage), " +
"callDate = IF(?callDate IS NULL, callDate, ?callDate), " +
"salesNote = IF(?salesNote IS NULL, salesNote, ?salesNote), " +
"totalTries = totalTries + 1, " +
"currentTries = currentTries + 1 WHERE leadId = ?leadId;";

参数看起来像这个

cmd.Parameters.Add(new MySqlParameter("?leadId", lead.lead_id));
cmd.Parameters.Add(new MySqlParameter("?orgNo", null));
cmd.Parameters.Add(new MySqlParameter("?companyName", null));
cmd.Parameters.Add(new MySqlParameter("?name", lead.name));
cmd.Parameters.Add(new MySqlParameter("?telephone", lead.telephone));
cmd.Parameters.Add(new MySqlParameter("?telephone1", lead.telephone1));
cmd.Parameters.Add(new MySqlParameter("?address", lead.address));
cmd.Parameters.Add(new MySqlParameter("?salesNote", DateTime.Now + "|" + agent + "|" + lead.stage + "|" + lead.status + "|" + lead.sales_note.Replace("|", "") + "rn"));
cmd.Parameters.Add(new MySqlParameter("?postalCode", lead.postal_code));
cmd.Parameters.Add(new MySqlParameter("?city", lead.city));
cmd.Parameters.Add(new MySqlParameter("?email", lead.email));
cmd.Parameters.Add(new MySqlParameter("?website", lead.website));
cmd.Parameters.Add(new MySqlParameter("?callbackDate", lead.callback_date));
cmd.Parameters.Add(new MySqlParameter("?status", lead.status));
cmd.Parameters.Add(new MySqlParameter("?stage", lead.stage));
cmd.Parameters.Add(new MySqlParameter("?callDate", DateTime.Now));

我得到的错误是这个Column 'companyName' cannot be null

请注意,orgNo和companyName是完全相同的列类型,并且都为null。希望有人能在这里帮我。谢谢

在为存储过程传递参数时,请考虑使用DBNull而不是null。

根据MSDN:向服务器发送null参数值时,必须指定DBNull,而不是null。

原因是一些SQL服务器以及C#与它们通信的方式可能不理解null表示缺少数据,而是运行时假设您尝试使用不存在或未初始化的对象。

使用DBNull相当简单,DBNull是一个单例对象,这意味着当您启动程序时,它们中只有一个

您不必初始化DBNull,因为它是在运行时创建的。要访问它,请使用DBNull.Value而不是null

这里有一个简短的例子:

var sqlParam = new MySqlParameter("?paramName", System.DBNull.Value);
cmd.Parameters.Add(sqlParam);

我刚刚记住,在Sql Server中存在函数COALESCE,它似乎非常适合这里,幸运的是,MySql中也有它。

string query = "UPDATE leads SET " +
"orgNo = COALESCE(?orgNo, orgNo), "  + 
....
"WHERE leadId = ?leadId;";

MySQL COALESCE((函数用于返回第一个非null表达式列表中的值。如果列表中的所有值都求值如果设置为NULL,则COALESCE((函数返回NULL。

关于COALESCE 的更多信息

相关内容

  • 没有找到相关文章

最新更新