Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

ExecuteNonQuery :la propriété de connexion n'a pas été initialisée.

Vous devez attribuer la connexion au SqlCommand , vous pouvez utiliser le constructeur ou la propriété :

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

Je recommande fortement d'utiliser le using-statement pour tout type implémentant IDisposable comme SqlConnection , cela fermera également la connexion :

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;
    //.....
    connection1.Open();
    // .... you don't need to close the connection explicitely
}

En dehors de cela, vous n'avez pas besoin de créer une nouvelle connexion et DataAdapter pour chaque entrée dans foreach , même si la création, l'ouverture et la fermeture d'une connexion ne signifient qu'ADO.NET créera, ouvrira et fermera un physique connexion mais regarde simplement dans le pool de connexions pour une connexion disponible. Néanmoins, c'est une surcharge inutile.