web-dev-qa-db-ja.com

SqlDataAdapterを使用して行を挿入する

SqlDataAdapterを使用してデータベースに行を挿入します。 CustomerOrdersデータベースに2つのテーブル(Custormers&Orders)があり、1,000を超えるレコードがあります。データベースに新しい顧客と注文をそれぞれのテーブルに追加するためのGUI(TextBoxes)を作成したいと思います。

  • どうすればよいですか?

私が通常従う方法は

dataAdapter = new SqlDataAdapter (sqlQuery, conn);
dataSet = new DataSet();
da.Fill(dataSet);

テキストボックスから値を取得(またはDataBindingを使用)して、dataSetに新しい行を追加し、呼び出します

  da.Update(dataSet);

しかし問題は、なぜ最初にda.Fill(dataSet)を使用して他のすべてのレコードをdataSetにフェッチする必要があるのか​​ということです。 1つの新しいレコードを追加したいだけです。

この目的のために私がやっていることは、DataSetにデータベースのスキーマを作成することです。このような:

  DataSet customerOrders = new DataSet("CustomerOrders");

  DataTable customers = customerOrders.Tables.Add("Customers");
  DataTable orders = customerOrders.Tables.Add("Orders");

  customers.Columns.Add("CustomerID", Type.GetType("System.Int32"));
  customers.Columns.Add("FirstName", Type.GetType("System.String"));
  customers.Columns.Add("LastName", Type.GetType("System.String"));
  customers.Columns.Add("Phone", Type.GetType("System.String"));
  customers.Columns.Add("Email", Type.GetType("System.String"));

  orders.Columns.Add("CustomerID", Type.GetType("System.Int32"));
  orders.Columns.Add("OrderID", Type.GetType("System.Int32"));
  orders.Columns.Add("OrderAmount", Type.GetType("System.Double"));
  orders.Columns.Add("OrderDate", Type.GetType("System.DateTime"));

  customerOrders.Relations.Add("Cust_Order_Rel", customerOrders.Tables["Customers"].Columns["CustomerID"], customerOrders.Tables["Orders"].Columns["CustomerID"]);   

DataBindingを使用して、これらの列をそれぞれのテキストボックスにバインドしました。今私は混乱しています!次に何をすればいいですか?挿入コマンドの使い方は? dataAdapter.SelectCommandを指定しなかったので、dataAdapter.Update()は機能しません。正しいアプローチを提案してください。

25
claws

「0 = 1」フィルターを使用して選択コマンドを設定し、 SqlCommandBuilder を使用して、挿入コマンドが自動的に生成されるようにします。

var sqlQuery = "select * from Customers where 0 = 1";
dataAdapter = new SqlDataAdapter(sqlQuery, conn);
dataSet = new DataSet();
dataAdapter.Fill(dataSet);

var newRow = dataSet.Tables["Customers"].NewRow();
newRow["CustomerID"] = 55;
dataSet.Tables["Customers"].Rows.Add(newRow);

new SqlCommandBuilder(dataAdapter);
dataAdapter.Update(dataSet);
43
Nathan Baulch

dataSetには空のセットを入力できます。例:

da = new SqlDataAdapter ("SELECT * FROM Customers WHERE id = -1", conn);
dataSet = new DataSet();
da.Fill(dataSet);

次に、行を追加してupdateを呼び出します。

ただし、このシナリオでは、SqlDataAdapterを使用しないほうがよいでしょう。代わりに、SqlCommandオブジェクトを直接挿入して使用します。 (さらに良いのは、LINQ to SQLまたはその他のORMを使用すること)

7
Manu