Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

ExecuteNonQuery:la proprietà di connessione non è stata inizializzata.

Devi assegnare la connessione a SqlCommand , puoi usare il costruttore o la proprietà:

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

Consiglio vivamente di utilizzare l'using-statement per qualsiasi tipo che implementa IDisposable come SqlConnection , chiuderà anche la connessione:

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
}

A parte questo, non è necessario creare una nuova connessione e DataAdapter per ogni voce nel foreach , anche se creare, aprire e chiudere una connessione non significa che ADO.NET creerà, aprirà e chiuderà un fisico connessione ma cerca semplicemente nel pool di connessioni una connessione disponibile. Tuttavia è un sovraccarico non necessario.