sql >> Databasteknik >  >> RDS >> Sqlserver

ExecuteNonQuery:Anslutningsegenskapen har inte initierats.

Du måste tilldela anslutningen till SqlCommand , kan du använda konstruktorn eller egenskapen:

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

Jag rekommenderar starkt att du använder using-statement för alla typer som implementerar IDisposable som SqlConnection , kommer det också att stänga anslutningen:

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
}

Förutom det behöver du inte skapa en ny anslutning och DataAdapter för varje post i foreach , även om skapa, öppna och stänga en anslutning inte innebär att ADO.NET kommer att skapa, öppna och stänga en fysisk anslutning utan tittar bara in i anslutningspoolen efter en tillgänglig anslutning. Ändå är det en onödig omkostnad.



  1. ROWIDTONCHAR() Funktion i Oracle

  2. Problemuppsättning 2 – Identifiera enheter och attribut

  3. Vilka är användningsfallen för att välja CHAR framför VARCHAR i SQL?

  4. lokala samlingstyper är inte tillåtna i SQL-satser