Я вставляю около 500 000 объектов в базу данных, где многие из них одинаковы (имеют одинаковое представление первичного ключа в базе данных), но другие поля могут отличаться, поэтому я использую подход «обновить - если строки не затронуты - вставить» , Проблема заключается в том, что иногда объект имеет какое-либо поле с нулевым значением (не читается из файла) и уже находится в базе данных с некоторым установленным значением, поэтому я обновляю его до нулевого = стираю его. Как реализовать сценарий, чтобы вы обновляли только поля которые не равны нулю?
Вот простой пример того, как я делаю это сейчас:
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<SqlParameter>().Where(param => param.Value == null))
{
param.Value = DBNull.Value;
}
}