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()は機能しません。正しいアプローチを提案してください。
「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);
dataSet
には空のセットを入力できます。例:
da = new SqlDataAdapter ("SELECT * FROM Customers WHERE id = -1", conn);
dataSet = new DataSet();
da.Fill(dataSet);
次に、行を追加してupdateを呼び出します。
ただし、このシナリオでは、SqlDataAdapter
を使用しないほうがよいでしょう。代わりに、SqlCommand
オブジェクトを直接挿入して使用します。 (さらに良いのは、LINQ to SQLまたはその他のORMを使用すること)