Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

ExecuteNonQuery:Verbindungseigenschaft wurde nicht initialisiert.

Sie müssen die Verbindung dem SqlCommand zuweisen , können Sie den Konstruktor oder die Eigenschaft verwenden:

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

Ich empfehle dringend, das using-statement zu verwenden für jeden Typ, der IDisposable implementiert wie SqlConnection , wird auch die Verbindung geschlossen:

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
}

Abgesehen davon müssen Sie keine neue Verbindung und DataAdapter erstellen für jeden Eintrag im foreach , auch wenn das Erstellen, Öffnen und Schließen einer Verbindung nicht bedeutet, dass ADO.NET ein physisches erstellt, öffnet und schließt Verbindung, sondern schaut einfach im Connection-Pool nach einer verfügbaren Verbindung. Trotzdem ist es ein unnötiger Mehraufwand.