Instruction préparée pour .Net Core Npgsql

Sep 09 2020

J'ai essayé de modifier certaines instructions SQL dans une application .Net Core pour qu'elles soient plus réutilisables en utilisant des instructions préparées, mais j'ai des problèmes avec le NpgsqlDbType.

J'ai essayé de suivre les instructions de documentation.

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

Mais il ne parvient pas à compiler, en disant

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

Est-ce que je manque quelque chose? Comment utiliser le NpgsqlDbType?

METTRE À JOUR

Je mets juste la dernière chose qui fonctionne ici au cas où cela pourrait profiter à quelqu'un d'autre

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

Réponses

2 ESG Sep 09 2020 at 02:16

NpgsqlDbType se trouve dans l'espace de noms NpgsqlTypes. Assurez-vous d'avoir un NpgsqlTypes en haut.

Si vous souhaitez définir la valeur en même temps, utilisez à la AddWithValueplace 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();

Si vous souhaitez ajouter le paramètre une fois et l'exécuter plusieurs fois, vous pouvez conserver une référence au paramètre

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

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