Значения параметров в инструкции SQL игнорируются в коде C#.C#

Место общения программистов C#
Ответить
Anonymous
 Значения параметров в инструкции SQL игнорируются в коде C#.

Сообщение Anonymous »

Если у вас есть следующий фрагмент кода C# для записи строк из DataTable в мою таблицу SQL Server:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»