sql >> Database >  >> RDS >> Sqlserver

ExecuteNonQuery:verbindingseigenschap is niet geïnitialiseerd.

U moet de verbinding toewijzen aan de SqlCommand , kunt u de constructor of de eigenschap gebruiken:

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

Ik raad ten zeerste aan om de using-statement . te gebruiken voor elk type dat IDisposable implementing implementeert zoals SqlConnection , het verbreekt ook de verbinding:

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
}

Afgezien daarvan hoeft u geen nieuwe verbinding te maken en DataAdapter voor elke invoer in de foreach , zelfs als het maken, openen en sluiten van een verbinding niet . doet betekent dat ADO.NET een fysieke . zal maken, openen en sluiten verbinding maar kijkt alleen in de verbindingspool naar een beschikbare verbinding. Toch is het een onnodige overhead.



  1. Oracle PLSQL-blokstructuur en -typen

  2. Script genereren om alle beperkingen voor externe sleutels in SQL Server-database in te schakelen - SQL Server / TSQL-zelfstudie, deel 78

  3. MySQL TIMEDIFF() vs TIMESTAMPDIFF():wat is het verschil?

  4. NVL()-functie in Oracle