Код: Выделить всё
foreach (DataRow row in dataTable.Rows)
{
string insertSql = GenerateInsertSql(tableName, dataTable.Columns, row);
using SqlCommand insertCommand = new(insertSql, connection);
foreach (DataColumn column in dataTable.Columns)
{
if (row[column] == DBNull.Value)
{
insertCommand.Parameters.AddWithValue($"@{column.ColumnName}", DBNull.Value);
}
}
foreach (SqlParameter param in insertCommand.Parameters)
{
Trace.WriteLine($"Parameter: {param.ParameterName}, Value: {param.Value}, SqlValue: {param.SqlValue}");
}
insertCommand.ExecuteNonQuery();
}
Я попробовал это, добавив параметры команды, но результатом для столбцов, содержащих DBNull.Value, является значение даты и времени по умолчанию «1900-01-01 00:00:00.000». Как я уже сказал, для этих столбцов разрешены нулевые значения, и нет никаких ограничений на то, чтобы столбцы превращали нулевые значения в это значение даты и времени по умолчанию.
В написанной трассировке я вижу, что Value == { и SqlValue == {Null.
Я также пробовал тот же код со значением параметра '1999-01-01 00:00:00.000, в в этом случае и Value, и SqlValue имеют значение даты «1999-01-01 00:00:00.000», но в базе данных после выполнения команды вставки значение снова равно «1900-01- 01 00:00:00.000'. На мой взгляд, параметры игнорируются при выполнении команды вставки.
Подробнее здесь: https://stackoverflow.com/questions/788 ... sharp-code
Мобильная версия