Maison >développement back-end >C++ >Pourquoi « ExecuteNonQuery » génère-t-il une erreur « Propriété de connexion non initialisée » dans .NET ?

Pourquoi « ExecuteNonQuery » génère-t-il une erreur « Propriété de connexion non initialisée » dans .NET ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-05 15:54:40751parcourir

Why Does `ExecuteNonQuery` Throw a

ExecuteNonQuery : propriété de connexion non initialisée

Problème

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é".

Exemple de code

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

Solution

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;

Utilisation de la recommandation d'instruction

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
}

Optimisation de la gestion des connexions

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!

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