Это на самом деле не подразумевается как ответ, так как я считаю, что мистер Харви сделал это достаточно, но это дольше, чем я могу добавить в комментарии, и у меня не будет форматирования ... поэтому заранее извиняюсь.
Прежде всего, пожалуйста, смотрите отзывы одного из авторов Npg sql о том, когда следует использовать обобщенный c API:
{ ссылка }
Кроме того, я не видел его в этом посте, но я также помню его комментарий, в котором указано, что одним из недостатков нового API является то, что он не переносим на другие адаптеры ADO. net, это означает, что если вы измените свой источник данных на Oracle, ожидайте, что это НЕ сработает.
Теперь, по моему горячему спортивному мнению ... Я видел, понимаю и согласен с обоснованием отказа от использования AddWithValue
, Тем не менее, я буду первым, кто признает, что использую его. Причина в том, что это обычно работает, и я думаю, что имя метода очень прозрачно в отношении того, что он выполняет.
Два случая, когда я строго избегаю этого:
- Объявить один раз назначьте много, как внутри транзакции, в которой вы выполняете несколько вставок, обновлений (или обновлений)
- Даты. Так как Postre SQL имеет дату и временную метку, но. NET имеет только System.Datetime,
AddWithValue
, похоже, предполагает, что вы имеете в виду System.DateTime -> timestamp, из-за которого ваша программа будет рваться. В этом случае AddWithValue экономит немного, так как вам необходимо повторно объявить тип данных как дату
Это действительно работает для типов данных массива, что довольно фантастично c.
Итак, вы можете сделать это:
cmd.Parameters.Add(new NpgsqlParameter("FOO", NpgsqlDbType.Array | NpgsqlDbType.Varchar));
cmd.Parameters[0].Value = myArray;
или вы можете сделать:
cmd.Parameters.AddWithValue("FOO", myArray);
И это прекрасно работает ... Я действительно люблю PostgreSQL и Npg Sql.