.NET Framework アプリケーションのデータベースに新しいレコードを挿入する
.NET Framework プロジェクトの ADO.NET を使用してデータベースに新しいレコードを挿入する一般的な方法として、 TableAdapter メソッドの使用が挙げられます。 TableAdapter を使用すると、アプリケーションとデータベース間で通信できます。 データベースに新しいレコードを挿入する方法は、アプリケーションの要件によって異なります。 TableAdapter.Update
メソッドまたは TableAdapter DBDirect メソッド (具体的には、TableAdapter.Insert
メソッド) の1 つを使用できます。
この記事では、Visual Basic (VB) または C# を使用して、ADO.NET と .NET Framework でビルドされたアプリケーションのデータベースにレコードを挿入する方法について説明します。 アプリケーション構成で Entity Framework 6 を使用する場合は、「コンテキストに新しいエンティティを追加する」または、Entity Framework Core の場合は、「データを追加」を参照してください。
Note
データセットと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初期からのレガシ .NET Framework テクノロジです。 テクノロジが特に役立つのは、ユーザーがデータを変更し、変更をデータベースに戻して保持できるようにするアプリケーションです。 データセットは非常に優れたテクノロジであることが証明されていますが、新しい .NET アプリケーションでは Entity Framework Core を使用することをお勧めしています。 Entity Framework には、オブジェクト モデルとして表形式データを操作する、より自然な方法が用意されており、よりシンプルなプログラミング インターフェイスが備わっています。
前提条件
TableAdapter メソッドを使用するには、使用可能なインスタンスが必要です。 詳細については、「.NET Framework アプリケーションでの TableAdapter の作成と構成」を参照してください。
.NETセキュリティ: 接続しようとしているデータベースへのアクセス権と、目的のテーブルへの挿入を実行するアクセス許可が必要です。
挿入メソッドの選択
データベースにレコードを挿入する方法は、アプリケーションのシナリオに基づいて異なります。 オプションを以下の表にまとめています。
シナリオ | 方法 | メモ |
---|---|---|
アプリは、データベースを使ってデータを格納します | TableAdapter.Update メソッドを使用して、すべての変更をデータベースに送信します | 変更には、更新、挿入、削除が含まれます。 |
アプリが objects を使用してデータを格納する | TableAdapter.Insert メソッドを使用して、データベースに新しいレコードを挿入する | この方法を使用すると、新しいレコードの作成を細かく制御できます。 |
アプリは、TableAdapters を使用します。Insert メソッドは使用できません |
Dataset Designer で、TableAdapter GenerateDBDirectMethods プロパティを true に設定し、データセットを保存して、TableAdapter を再生成します。 |
TableAdapter に Insert メソッドが無い場合は、TableAdapter を、ストアド プロシージャを使用するように構成するか、GenerateDBDirectMethods プロパティを false に設定します。 TableAdapter を再生成した後でも、 Insert メソッドが使用できない場合は、テーブル プロパティが、各行を区別するために十分なスキーマ情報を提供できていません (例: テーブルにプライマリ キーが設定されていないなど)。 |
アプリが TableAdapters を使用しない | コマンド オブジェクト を使用して、データベースに新しいレコードを挿入します。 | 例: SqlCommand |
TableAdapter を使用して新しいレコードを挿入する
アプリケーションでデータセットを使用してデータを格納する場合は、データセット内の目的の DataTable に新しいレコードを追加し、TableAdapter.Update
メソッドを呼び出すことができます。 TableAdapter.Update
メソッドは、DataTable の変更をデータベースに送信します (変更されたレコードと削除されたレコードを含む)
TableAdapter.Update メソッドを使用して新しいレコードを挿入する
次の手順では、TableAdapter.Update
メソッドを使用してデータベースに新しいレコードを挿入する方法を示します。
新しい DataRow を作成し、Rows コレクションに追加して、目的の DataTable に新しいレコードを追加します。
新しい行をDataTable に追加者ら、
TableAdapter.Update
メソッドを呼び出します。 更新するデータの量を制御するには、次のいずれかのパラメーター値を渡します。次のコードでは、DataTable に新しいレコードを追加し、
TableAdapter.Update
メソッドを呼び出して新しい行をデータベースに保存する方法を示します この例では、Northwind データベースのRegion
テーブルを使用します。// Create a new row. NorthwindDataSet.RegionRow newRegionRow; newRegionRow = northwindDataSet.Region.NewRegionRow(); newRegionRow.RegionID = 5; newRegionRow.RegionDescription = "NorthWestern"; // Add the row to the Region table this.northwindDataSet.Region.Rows.Add(newRegionRow); // Save the new row to the database this.regionTableAdapter.Update(this.northwindDataSet.Region);
TableAdapter.Insert メソッドを使用して新しいレコードを挿入する
アプリケーションでオブジェクトを使用してデータを格納する場合は、TableAdapter.Insert
メソッドを使用してデータベースに直接新しい行を作成できます。 Insert
メソッドは、各列の個別の値をパラメーターとして受け取ります。 メソッドを呼び出すと、渡されたパラメータ値を使用して新しいレコードがデータベースに挿入されます。
- TableAdapter の
Insert
メソッドを呼び出し、各列の値をパラメーターとして渡します。
次の手順は、TableAdapter.Insert
メソッドを使用して行を挿入する方法を示しています。 この例では、Northwind データベースの Region
テーブルにデータを挿入します。
Note
使用可能なインスタンスがない場合は、使用する TableAdapter をインスタンス化します。
NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter =
new NorthwindDataSetTableAdapters.RegionTableAdapter();
regionTableAdapter.Insert(5, "NorthWestern");
コマンド オブジェクトを使用して新しいレコードを挿入する
コマンド・オブジェクトを使用すると、新しいレコードをデータベースに直接挿入できます。
- 新しいコマンド オブジェクトを作成し、
Connection
、CommandType
、CommandText
の各プロパティを設定します。
次の手順では、コマンド オブジェクトを使用してデータベースにレコードを挿入する方法を示します。 この例では、Northwind データベースの Region
テーブルにデータを挿入します。
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 = "INSERT Region (RegionID, RegionDescription) VALUES (5, 'NorthWestern')";
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();