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.