sql >> Base de Datos >  >> RDS >> Sqlserver

ExecuteNonQuery:la propiedad de conexión no se ha inicializado.

Debe asignar la conexión al SqlCommand , puede usar el constructor o la propiedad:

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

Recomiendo enfáticamente usar la using-statement para cualquier tipo que implemente IDisposable como SqlConnection , también cerrará la conexión:

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
}

Aparte de eso, no necesita crear una nueva conexión y DataAdapter para cada entrada en el foreach , incluso si crear, abrir y cerrar una conexión no significa que ADO.NET creará, abrirá y cerrará un archivo físico conexión, pero solo busca en el grupo de conexiones una conexión disponible. Sin embargo, es una sobrecarga innecesaria.