Подготовленная инструкция .Net Core Npgsql

#.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 была довольно запутанной, но это идеально