開発者は、.NET プログラムの実行中に「ExecuteNonQuery: 接続プロパティ」によりエラーが発生しました初期化されていません」というメッセージ。
次のコード サンプルは、この問題を示しています。
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(); } } }
この問題を解決するには、SqlCommand の接続プロパティを割り当てる必要があります。これは、コマンドの作成時に行うことも、後でプロパティを設定することによっても行うことができます。
コマンド作成時の割り当て
SqlCommand cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ", connection);
後でプロパティを設定する
cmd.Connection = connection;
オブジェクトの場合SqlConnection などの IDisposable を実装する場合は、using ステートメントを使用することをお勧めします。接続は自動的に閉じられ、例外が処理されます。
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 }
パフォーマンスを最適化するために、foreach ループ内のエントリごとに新しい接続とデータ アダプターを作成する必要はありません。 。 ADO.NET は接続を自動的に管理し、接続プーリングを使用します。
以上が.NET で「ExecuteNonQuery」を実行すると「接続プロパティが初期化されていません」というエラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。