Instrução preparada de .Net Core Npgsql

Sep 09 2020

Tenho tentado alterar algumas instruções SQL em um aplicativo .Net Core para ser mais reutilizável usando instruções preparadas, mas estou tendo problemas com o NpgsqlDbType.

Tentei seguir as instruções da documentação.

NpgsqlCommand command = new NpgsqlCommand (
    " select * from computers where com_phys = @com_phys ",
    dbconnection
);
command.Parameters.Add("com_phys", NpgsqlDbType.Varchar);
command.Prepare();

Mas está falhando ao compilar, dizendo

The name 'NpgsqlDbType' does not exist in the current context

Estou esquecendo de algo? Como faço para usar o NpgsqlDbType?

ATUALIZAR

Estou apenas colocando a coisa final de trabalho aqui, caso possa beneficiar alguém

// 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();

Respostas

2 ESG Sep 09 2020 at 02:16

NpgsqlDbType está no namespace NpgsqlTypes. Certifique-se de ter um usando NpgsqlTypes na parte superior.

Se você quiser definir o valor ao mesmo tempo, use em AddWithValuevez deAdd

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();

Se quiser adicionar o parâmetro uma vez e executar várias vezes, você pode manter uma referência ao parâmetro

var parameter = command.Parameters.Add("com_phys", NpgsqlDbType.Varchar);

// Later, in a loop
parameter.Value = "someValue";