Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

ExecuteNonQuery:a propriedade de conexão não foi inicializada.


Você precisa atribuir a conexão ao SqlCommand , você pode usar o construtor ou a propriedade:
cmd.InsertCommand = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ");
cmd.InsertCommand.Connection = connection1;

Eu recomendo usar o using-statement para qualquer tipo de implementação de IDisposable como SqlConnection , ele também fechará a conexão:
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
}

Além disso, você não precisa criar uma nova conexão e DataAdapter para cada entrada no foreach , mesmo que criar, abrir e fechar uma conexão não significa que o ADO.NET criará, abrirá e fechará um físico conexão, mas apenas procura no pool de conexões uma conexão disponível. No entanto, é uma sobrecarga desnecessária.