.NET Framework アプリケーションのデータベースに新しいレコードを挿入する

Note

データセットと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初期からのレガシ .NET Framework テクノロジです。 これらが特に役立つのは、ユーザーがデータを変更し、変更をデータベースに戻して保持できるようにするアプリケーションです。 データセットは非常に優れたテクノロジであることが証明されていますが、新しい .NET アプリケーションでは Entity Framework Core を使用することをお勧めしています。 Entity Framework には、オブジェクト モデルとして表形式データを操作する、より自然な方法が用意されており、よりシンプルなプログラミング インターフェイスが備わっています。

.NET Framework プロジェクトで ADO.NET で新しいレコードをデータベースに挿入するには、TableAdapter.Update メソッド、または TableAdapter の DBDirect メソッドの 1 つ (具体的には TableAdapter.Insert メソッド) を使用します。 詳細については、TableAdapter に関するページを参照してください。

アプリケーションで TableAdapter を使用しない場合は、コマンド オブジェクト (SqlCommand など) を使用してデータベースに新しいレコードを挿入できます。

アプリケーションでデータセットを使用してデータを格納する場合は、TableAdapter.Update メソッドを使用します。 Update メソッドでは、すべての変更 (更新、挿入、削除) をデータベースに送信します。

アプリケーションでオブジェクトを使用してデータを格納する場合、またはデータベースで新しいレコードの作成をより細かく制御する必要がある場合は、TableAdapter.Insert メソッドを使用します。

TableAdapter に Insert メソッドがない場合は、TableAdapter がストアド プロシージャを使用するように構成されているか、その GenerateDBDirectMethods プロパティが false に設定されていることを意味します。 データセット デザイナー内から TableAdapter の GenerateDBDirectMethods プロパティを true に設定し、データセットを保存します。 このアクションにより、TableAdapter が再生成されます。 TableAdapter に Insert メソッドがまだない場合、テーブルには、個別の行を区別するための十分なスキーマ情報がない可能性があります (たとえば、テーブルに主キーが設定されていない可能性があります)。

Note

この記事は、ADO.NET と.NET Framework での開発に適用されます。 Entity Framework 6 での同じ作業については、「新しいエンティティをコンテキストに追加する」を参照してください。 Entity Framework Core については、「データの追加」を参照してください。

TableAdapter を使用して新しいレコードを挿入する

TableAdapter には、アプリケーションの要件に応じて、データベースに新しいレコードを挿入するためのさまざまな方法が用意されています。

アプリケーションでデータセットを使用してデータを格納する場合は、データセット内の目的の DataTable に新しいレコードを追加し、TableAdapter.Update メソッドを呼び出すことができます。 TableAdapter.Update メソッドでは、DataTable の変更をデータベースに送信します (変更されたレコードと削除されたレコードを含む)。

TableAdapter.Update メソッドを使用して新しいレコードをデータベースに挿入するには

  1. 新しい DataRow を作成し、Rows コレクションに追加して、目的の DataTable に新しいレコードを追加します。

  2. 新しい行を DataTable に追加した後、TableAdapter.Update メソッドを呼び出します。 更新するデータの量を制御するには、DataSet 全体、DataTableDataRow の配列、または単一の DataRow を渡します。

    次のコードでは、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");

コマンド オブジェクトを使用して新しいレコードを挿入する

コマンド オブジェクトを使用して、新しいレコードをデータベースに直接挿入できます。

コマンド オブジェクトを使用して新しいレコードをデータベースに挿入するには

  • 新しいコマンド オブジェクトを作成し、ConnectionCommandTypeCommandText の各プロパティを設定します。

次の例では、コマンド オブジェクトを使用してデータベースにレコードを挿入する方法を示します。 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();

.NET セキュリティ

接続しようとしているデータベースへのアクセス権と、目的のテーブルに挿入を実行する権限が必要です。