Maison >développement back-end >C++ >Pourquoi « ExecuteNonQuery() » échoue-t-il avec une erreur « Propriété de connexion non initialisée » ?

Pourquoi « ExecuteNonQuery() » échoue-t-il avec une erreur « Propriété de connexion non initialisée » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-03 21:49:39750parcourir

Why Does `ExecuteNonQuery()` Fail with an

ExecuteNonQuery : Échec dû à une propriété de connexion non initialisée

Question :

Lors de la tentative d'exécution d'une commande SQL à l'aide de ExecuteNonQuery( ), une erreur est rencontrée indiquant que la propriété de connexion n'a pas été initialisée. Quelle pourrait être la cause de ce problème ?

Réponse :

Le message d'erreur « ExecuteNonQuery : la propriété Connection n'a pas été initialisée » suggère que l'objet SqlConnection n'a pas été correctement attribué à l'objet SqlCommand. Pour résoudre ce problème, la propriété de connexion de SqlCommand doit être explicitement définie.

Solution :

Une méthode pour attribuer la connexion consiste à utiliser le constructeur de la classe SqlCommand. :

cmd.InsertCommand = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ", connection1);

Alternativement, la propriété de connexion peut être attribuée directement :

cmd.InsertCommand.Connection = connection1;

Considérations supplémentaires :

  • Instruction d'utilisation : Il est recommandé d'utiliser l'instruction using pour les objets implémentant IDisposable , tel que SqlConnection, pour garantir un nettoyage correct des ressources et la fermeture de la connexion.
  • Connexion Pooling : Créer et fermer des connexions à plusieurs reprises (par exemple, pour chaque entrée de la boucle foreach) est une surcharge inutile. Au lieu de cela, envisagez de créer et d'ouvrir la connexion une fois en dehors de la boucle et de la fermer uniquement une fois la boucle terminée.

Exemple de code :

using (var connection1 = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True"))
using (var cmd = new SqlDataAdapter())
using (var insertCommand = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) "))
{
    insertCommand.Connection = connection1;
    cmd.InsertCommand = insertCommand;

    // Other code...

    connection1.Open();
    insertCommand.ExecuteNonQuery();
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn