Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

ExecuteNonQuery:Właściwość połączenia nie została zainicjowana.

Musisz przypisać połączenie do SqlCommand , możesz użyć konstruktora lub właściwości:

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

Zdecydowanie polecam użycie using-statement dla dowolnego typu implementującego IDisposable jak SqlConnection , spowoduje to również zamknięcie połączenia:

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
}

Poza tym nie musisz tworzyć nowego połączenia i DataAdapter dla każdego wpisu w foreach , nawet jeśli tworzenie, otwieranie i zamykanie połączenia nie oznaczają, że ADO.NET utworzy, otworzy i zamknie fizyczny połączenie, ale po prostu szuka dostępnego połączenia w puli połączeń. Niemniej jednak jest to niepotrzebne obciążenie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ustawić sortowanie dla połączenia w SQL Server?

  2. Zwróć bieżącą nazwę logowania w SQL Server (T-SQL)

  3. Używanie StringWriter do serializacji XML

  4. Wyniki oddzielone przecinkami w SQL

  5. Zapytanie SQL, aby znaleźć N-tą najwyższą pensję z tabeli wynagrodzeń