System.NullReferenceException は、CommandBuilder オブジェクトを使用するときに発生します
この記事は、オブジェクトを System.NullReferenceException
使用するときに発生する例外を CommandBuilder
解決するのに役立ちます。
元の製品バージョン: Visual Basic .NET
元の KB 番号: 310367
現象
オブジェクトを使用して、オブジェクトの CommandBuilder
コマンドを次のように明示的に取得する DataAdapter
場合:
da.InsertCommand = cb.GetInsertCommand
次に、次の Visual Basic .NET コードを実行します。
cb.DataAdapter = Nothing
に DataAdapter
追加したコマンドは削除され、次のエラー メッセージが表示されます。
型 'System.NullReferenceException' の未処理の例外が app_name.exe で発生しました
追加情報: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
原因
CommandBuilder
は、 からDataAdapter
関連付けが解除され、リンクされている場合に生成されるコマンドをDataAdapter.CommandBuilder
削除します。リンク解除または関連付け解除されると、コマンドは null になります。 この問題は、最初からビルドするコマンドには影響しません。
解決方法
この問題を解決するには、次のいずれかの方法を使用します。
- から
DataSet
をCommandBuilder
関連付け解除しないでください。 - コード内または Visual Data Tools を使用して、コマンドを自分でビルドします。
状態
この動作は仕様です。
動作の再現手順
新しい Visual Basic .NET Windows アプリケーション プロジェクトを作成します。 Form1 は既定でプロジェクトに追加されます。
Form1 に Button コントロールを追加します。
[コード] ビューに切り替え、[コード] ウィンドウの上部に次のコードを追加します。
Imports System.Data.OleDb Imports System.Data.SqlClient
Button のイベントに
Click
次のコードを追加します。Dim con As New SqlConnection("server=myserver;uid=sa;pwd=mypassword;" & _ "database=northwind") Dim da As New SqlDataAdapter("Select * From Customers", con) Dim cb As New SqlCommandBuilder(da) Dim cmdInsert As New SqlCommand( _ "Insert Into Customer (CustomerID) Value ('AAAAA')", con) da.InsertCommand = cmdInsert da.UpdateCommand = cb.GetUpdateCommand da.DeleteCommand = cb.GetDeleteCommand Debug.WriteLine(da.InsertCommand.CommandText) Debug.WriteLine(da.DeleteCommand.CommandText) cb.DataAdapter = Nothing ' Comment out this line to avoid the error. cb = Nothing Debug.WriteLine(da.InsertCommand.CommandText) Debug.WriteLine(da.DeleteCommand.CommandText)'Error occurs here.
環境に応じて接続文字列を変更します。
F5 キーを押してコンパイルし、アプリケーションを実行します。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示