#.net-core #centos7 #npgsql
#.net-core #centos7 #npgsql
Вопрос:
Я пытался изменить некоторые инструкции SQL в приложении .Net Core для более многократного использования с помощью подготовленных инструкций, но у меня возникли проблемы с типом NPGSQLDB.
Я пытался следовать инструкциям документации.
NpgsqlCommand command = new NpgsqlCommand (
" select * from computers where com_phys = @com_phys ",
dbconnection
);
command.Parameters.Add("com_phys", NpgsqlDbType.Varchar);
command.Prepare();
Но не удается скомпилировать, говоря
The name 'NpgsqlDbType' does not exist in the current context
Я что-то упускаю? Как мне использовать NpgsqlDbType?
Обновить
Я просто помещаю здесь последнюю рабочую вещь на случай, если это может принести пользу кому-либо еще
// prepare
NpgsqlCommand command = new NpgsqlCommand (
" select * from computers where com_phys = @com_phys ",
dbconnection
);
var param01 = command.Parameters.Add("com_phys", NpgsqlDbType.Varchar);
command.Prepare();
// execute 01
param01.Value = "value01";
var results = command.ExecuteReader();
while(results.Read()) {
// nothing
}
command.Close();
// execute 02
param01.Value = "value02";
var results = command.ExecuteReader();
while(results.Read()) {
// nothing
}
command.Close();
Комментарии:
1.
NpgsqlDbType
находится вNpgsqlTypes
пространстве имен. Убедитесь, что вверху у вас естьusing NpgsqlTypes
, или используйтеNpgsqlTypes.NpgsqlDbType.Varchar
2. Удивительно, что сработало, большое спасибо, теперь чувствую себя очень глупо
3. Я не думаю, что вы знаете, как задать параметру значение перед выполнением?
Ответ №1:
NpgsqlDbType находится в пространстве имен NpgsqlTypes. Убедитесь, что вверху у вас есть using NpgsqlTypes.
Если вы хотите одновременно задать значение, используйте AddWithValue
вместо Add
NpgsqlCommand command = new NpgsqlCommand (
" select * from computers where com_phys = @com_phys ",
dbconnection
);
command.Parameters.AddValue("com_phys", NpgsqlDbType.Varchar, value);
// OR command.Parameters.AddValue("com_phys", NpgsqlDbType.Varchar, size, value);
// OR command.Parameters.AddValue("com_phys", value);
command.Prepare();
Если вы хотите добавить параметр один раз и выполнить несколько раз, вы можете сохранить ссылку на параметр
var parameter = command.Parameters.Add("com_phys", NpgsqlDbType.Varchar);
// Later, in a loop
parameter.Value = "someValue";
Комментарии:
1. Это здорово, спасибо. Разве невозможно добавить без значения и установить значение позже для многократного использования?
2. @TheLovelySausage соответствующим образом обновил ответ
3. Это именно то, что мне было нужно, документация Npgsql была довольно запутанной, но это идеально