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

ExecuteNonQuery:Forbindelsesegenskaben er ikke blevet initialiseret.

Du skal tildele forbindelsen til SqlCommand , kan du bruge konstruktøren eller egenskaben:

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

Jeg anbefaler stærkt at bruge using-statement for enhver type, der implementerer IDisposable som SqlConnection , vil det også lukke forbindelsen:

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
}

Udover det behøver du ikke oprette en ny forbindelse og DataAdapter for hver indtastning i foreach , selvom oprettelse, åbning og lukning af en forbindelse ikke betyder, at ADO.NET vil oprette, åbne og lukke en fysisk forbindelse, men kigger bare ind i forbindelsespuljen for en tilgængelig forbindelse. Ikke desto mindre er det en unødvendig overhead.



  1. 2 måder at få de tilgængelige tegnsæt i MariaDB

  2. Importer Excel-regnearkskolonner til SQL Server-databasen

  3. SQL Developer 4.0 udgivet

  4. Oracle svarende til ROWLOCK, UPDLOCK, READPAST forespørgselstip