Csharp/C#教程:带有可选参数的Sql update命令?分享


带有可选参数的Sql update命令?

我将大约500,000个对象插入到数据库中,其中许多对象是相同的(在数据库中具有相同的主键表示),但是其他字段可能不同,因此我使用方法“更新 – 如果没有行影响 – 插入”。 问题是有时一个对象将某个字段设置为null(从文件中读取)并且已经在数据库中设置了一些值,因此我将其更新为null =擦除它。)如何实现方案,您只更新字段那不是空的?

这是我现在如何做的一个简单示例:

private const string UpdateKun = "UPDATE pde.Kun SET Jmeno=@Jmeno WHERE Licence=@Licence"; private const string InsertKun = "INSERT INTO pde.Kun ([Licence], [Jmeno], [VykonnostniStupen]) VALUES (@Licence, @Jmeno, @VykonnostniStupen)"; var cmd = new SqlCommand(UpdateKun, conn, tran); cmd.Parameters.AddWithValue("@Licence", kun.Licence); cmd.Parameters.AddWithValue("@Jmeno", kun.Jmeno); RepairNulls(cmd.Parameters); if (cmd.ExecuteNonQuery() > 0) return; cmd = new SqlCommand(InsertKun, conn, tran); cmd.Parameters.AddWithValue("@Licence", kun.Licence); cmd.Parameters.AddWithValue("@Jmeno", kun.Jmeno); cmd.Parameters.AddWithValue("@VykonnostniStupen", 0); RepairNulls(cmd.Parameters); cmd.ExecuteNonQuery(); private void RepairNulls(SqlParameterCollection col) { foreach (SqlParameter param in col.Cast().Where(param => param.Value == null)) { param.Value = DBNull.Value; } } 

将更新更改为:

 UPDATE pde.Kun SET Jmeno=@Jmeno WHERE Licence=@Licence AND @Jmeno IS NOT NULL 

如果要更新多个列:

 UPDATE pde.Kun SET Jmeno = COALESCE(@Jmeno, Jmeno) , ColumnB = COALESCE(@ColumnB, ColumnB) WHERE Licence=@Licence 

不要仅仅为了检查行是否存在而更新数据库

 SELECT COUNT(*) FROM pde.Kun WHERE Licence=@Licence 

并检查返回的值是否大于0

上述就是C#学习教程:带有可选参数的Sql update命令?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/950842.html

(0)
上一篇 2021年11月17日
下一篇 2021年11月17日

精彩推荐