方法 : データベースのレコードを更新する
更新 : 2007 年 11 月
データベースのレコードを更新 (編集) するには、TableAdapter.Update メソッドを使用できます。TableAdapter.Update メソッドは、渡されるパラメータによって異なる操作を実行するオーバーロードを提供します。この一連のメソッド署名を呼び出した結果の違いを理解することは重要です。
メモ : |
---|
アプリケーションが TableAdapter を使用しない場合は、ExecuteNonQuery などのコマンド オブジェクトを使用してデータベースのレコードを更新します。コマンド オブジェクトによるデータの更新の詳細については、次の「コマンド オブジェクトによるレコードの更新」を参照してください。 |
次の表に、各種の TableAdapter.Update メソッドの動作を説明します。
メソッド |
説明 |
---|---|
TableAdapter.Update(DataTable) |
DataTable のすべての変更をデータベースに保存します。これには、テーブルから削除された行の除去、テーブルに挿入された行の追加、テーブルで変更された行の更新が含まれます。 |
TableAdapter.Update(DataSet) |
パラメータはデータセットを受け取りますが、TableAdapter は TableAdapter に関連付けられている DataTable のすべての変更をデータベースに保存します。これには、テーブルから削除された行の除去、テーブルに挿入された行の追加、テーブルで変更された行の更新が含まれます。 |
TableAdapter.Update(DataRow) |
指定された DataRow における変更をデータベースに保存します。 |
TableAdapter.Update(DataRows()) |
DataRow の配列のすべての行の変更をデータベースに保存します。 |
TableAdapter.Update("new column values", "original column values") |
元の列値によって識別される単一の列の変更を保存します。 |
アプリケーションがデータを格納するためにデータセットを排他的に使用する場合は、一般に DataSet、DataTable、または DataRow を受け取る TableAdapter.Update メソッドを使用します。
アプリケーションがオブジェクトを使用してデータを格納する場合は、一般に列値を受け取る TableAdapter.Update メソッドを使用します。
TableAdapter に列値を受け取る Update メソッドがない場合は、TableAdapter がストアド プロシージャを使用するように構成されているか、または GenerateDBDirectMethods プロパティが false に設定されています。データセット デザイナで TableAdapter の GenerateDBDirectMethods プロパティを true に設定し、データセットを保存して TableAdapter を再作成してみてください。それでも TableAdapter に列値を受け取る Update メソッドがない場合は、テーブルが個々の行を区別するために十分なスキーマ情報を提供していないことが考えられます (テーブルに主キーが設定されていないなど)。
TableAdapter による既存のレコードの更新
TableAdapter は、アプリケーションの要件によってデータベースのレコードを更新するための複数の方法を提供します。
アプリケーションがデータセットを使用してデータを格納する場合、目的の DataTable でレコードを更新し、次に TableAdapter.Update メソッドを呼び出して、DataSet、DataTable、DataRow、または DataRow の配列を渡すだけで済みます。上の表では、各種の Update メソッドを説明しています。
DataSet、DataTable、DataRow、または DataRows() を受け取る TableAdapter.Update メソッドを使用してデータベースのレコードを更新するには
DataTable の DataRow を直接編集することによって、目的の DataTable のレコードを編集します。詳細については、「方法 : DataTable の行を編集する」を参照してください。
DataTable の行を編集した後に、TableAdapter.Update メソッドを呼び出します。更新するデータの量は、DataSet 全体、単一の DataTable、DataRow の配列、または単一の DataRow を渡すことによって制御できます。
DataTable のレコードを編集し、TableAdapter.Update メソッドを呼び出してデータベースに変更内容を保存するコード例を次に示します。この例では、Northwind データベースの Region テーブルを使用します。
' Locate the row you want to update. Dim regionRow As NorthwindDataSet.RegionRow regionRow = NorthwindDataSet._Region.FindByRegionID(1) ' Assign the new value to the desired column. regionRow.RegionDescription = "East" ' Save the updated row to the database Me.RegionTableAdapter.Update(Me.NorthwindDataSet._Region)
// Locate the row you want to update. NorthwindDataSet.RegionRow regionRow; regionRow = northwindDataSet.Region.FindByRegionID(1); // Assign the new value to the desired column. regionRow.RegionDescription = "East"; // Save the updated row to the database. this.regionTableAdapter.Update(this.northwindDataSet.Region);
アプリケーションがデータをアプリケーションに格納するためにオブジェクトを使用する場合、TableAdapter の DBDirect のメソッドを使用してオブジェクトからデータベースに直接データを送ることができます。この一連のメソッドでは、各列の個々の値をメソッド パラメータとして渡すことができます。このメソッドを呼び出すと、メソッドに渡された列値を使用してデータベースの既存のレコードが更新されます。
次の手順では、例として Northwind の Region テーブルを使用します。
列値を受け取る TableAdapter.Update メソッドを使用してデータベースのレコードを更新するには
各列の新しい値と元の値をパラメータとして渡して TableAdapter の Update メソッドを呼び出します。
メモ : 使用できるインスタンスがない場合は、使用する TableAdapter をインスタンス化します。
Dim regionTableAdapter As New NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter.Update(1, "East", 1, "Eastern")
NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter = new NorthwindDataSetTableAdapters.RegionTableAdapter(); regionTableAdapter.Update(1, "East", 1, "Eastern");
コマンド オブジェクトによるレコードの更新
コマンド オブジェクトを使用してデータベースの既存のレコードを直接更新する例を次に示します。コマンドとストアド プロシージャを実行するコマンド オブジェクトの使い方の詳細については、「アプリケーションへのデータのフェッチ」を参照してください。
次の手順では、例として Northwind の Region テーブルを使用します。
コマンド オブジェクトを使用してデータベースの既存のレコードを更新するには
新しいコマンド オブジェクトを作成し、Connection、CommandType、および CommandText の各プロパティを設定し、次に接続を開いてコマンドを実行します。
Dim sqlConnection1 As New System.Data.SqlClient.SqlConnection("YOUR CONNECTION STRING") Dim cmd As New System.Data.SqlClient.SqlCommand cmd.CommandType = System.Data.CommandType.Text cmd.CommandText = "UPDATE Region SET RegionID = 1, RegionDescription = 'East' WHERE RegionID = 1" cmd.Connection = sqlConnection1 sqlConnection1.Open() cmd.ExecuteNonQuery() sqlConnection1.Close()
System.Data.SqlClient.SqlConnection sqlConnection1 = new System.Data.SqlClient.SqlConnection("YOUR CONNECTION STRING"); System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = "UPDATE Region SET RegionID = 1, RegionDescription = 'East' WHERE RegionID = 1"; cmd.Connection = sqlConnection1; sqlConnection1.Open(); cmd.ExecuteNonQuery(); sqlConnection1.Close();
セキュリティ
目的のテーブルでレコードを更新する許可および接続するデータベースに対するアクセス許可が必要です。