Maison >développement back-end >C++ >Pourquoi « ExecuteNonQuery » génère-t-il une erreur « Propriété de connexion non initialisée » dans .NET ?
Un développeur a rencontré une erreur lors de l'exécution d'un programme .NET en raison de "ExecuteNonQuery : propriété de connexion n'a pas été initialisé".
L'exemple de code suivant illustre le problème :
using System.Data.SqlClient; namespace Test { class Program { static void Main() { SqlConnection connection = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True"); SqlCommand cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) "); connection.Open(); // Connection is not assigned to the command cmd.ExecuteNonQuery(); connection.Close(); } } }
Pour résoudre le problème, la propriété de connexion de SqlCommand doit être attribuée. Cela peut être fait lors de la création de la commande ou en définissant la propriété ultérieurement.
Attribution lors de la création de la commande
SqlCommand cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ", connection);
Définition de la propriété ultérieurement
cmd.Connection = connection;
Pour les objets qui implémentent IDisposable, tels que SqlConnection, l'instruction using est recommandée. Il ferme automatiquement la connexion et gère toutes les exceptions :
using (var connection = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True")) using (var cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ")) { cmd.Connection = connection; // Connection is automatically closed when leaving the using block }
Pour optimiser les performances, il n'est pas nécessaire de créer une nouvelle connexion et un nouvel adaptateur de données pour chaque entrée de la boucle foreach. . ADO.NET gère automatiquement les connexions et utilise le pooling de connexions.
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!