Rumah >pembangunan bahagian belakang >C++ >Mengapakah `ExecuteNonQuery` Melemparkan Ralat 'Harta Sambungan Tidak Dimulakan' dalam .NET?

Mengapakah `ExecuteNonQuery` Melemparkan Ralat 'Harta Sambungan Tidak Dimulakan' dalam .NET?

Barbara Streisand
Barbara Streisandasal
2025-01-05 15:54:40748semak imbas

Why Does `ExecuteNonQuery` Throw a

ExecuteNonQuery: Connection Property Not Initialized

Problem

Seorang pembangun mengalami ralat semasa menjalankan program .NET disebabkan oleh "ExecuteNonQuery: Connection property mesej belum dimulakan".

Kod Sampel

Sampel kod berikut menggambarkan isu:

using System.Data.SqlClient;

namespace Test
{
    class Program
    {
        static void Main()
        {
            SqlConnection connection = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ");

            connection.Open();  // Connection is not assigned to the command
            cmd.ExecuteNonQuery();
            connection.Close();
        }
    }
}

Penyelesaian

Untuk menyelesaikan isu tersebut, sifat sambungan SqlCommand mesti diberikan. Ini boleh dilakukan semasa penciptaan perintah atau dengan menetapkan harta kemudian.

Menetapkan Semasa Membuat Perintah

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

Menetapkan Harta Kemudian

cmd.Connection = connection;

Menggunakan Syor Pernyataan

Untuk objek yang melaksanakan IDisposable, seperti SqlConnection, pernyataan penggunaan adalah disyorkan. Ia menutup sambungan secara automatik dan mengendalikan sebarang pengecualian:

using (var connection = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True"))
using (var cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) "))
{
    cmd.Connection = connection;
    // Connection is automatically closed when leaving the using block
}

Mengoptimumkan Pengurusan Sambungan

Untuk mengoptimumkan prestasi, anda tidak perlu membuat sambungan baharu dan penyesuai data untuk setiap entri dalam gelung foreach . ADO.NET mengurus sambungan secara automatik dan menggunakan pengumpulan sambungan.

Atas ialah kandungan terperinci Mengapakah `ExecuteNonQuery` Melemparkan Ralat 'Harta Sambungan Tidak Dimulakan' dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn