目前分類:資料庫存取 (6)

瀏覽方式: 標題列表 簡短摘要
在dataset中,可能有多個表格(DataTable),而其中有可能某table與另一table有Master-Detail的關係,可以用dataset.relations建立關聯

下列程式碼範例在 DataSet 中使用兩個 DataTable 物件來建立 DataRelation。每個 DataTable 都包含一個名為 CustID 的資料行,做為兩個 DataTable 物件間的連結。此範例會將一個 DataRelation 加入 DataSetRelations 集合中。範例中第一個引數指定即將被建立的 DataRelation 的名稱,第二個引數設定父 DataColumn,第三個引數則設定子 DataColumn

pagichang 發表在 痞客邦 留言(0) 人氣()

許多情況下,以何種順序將透過 DataSet 所進行的變更傳送給資料來源是很重要的。例如,如果更新了現有資料列的主索引鍵值,也加入了具有新主索引鍵值的資料列,則先進行更新再執行插入是很重要的。

您可以使用 DataTableSelect 方法,傳回只以特定 RowState 參考資料列的 DataRow 陣列。接著,您可以將傳回的 DataRow 陣列傳遞給 DataAdapterUpdate 方法來處理已修改的資料列。您可指定要更新的資料列子集,藉以控制插入、更新和刪除的處理順序。



DataTable table = dataSet.Tables["Customers"];// First process deletes.adapter.Update(table.Select(null, null, DataViewRowState.Deleted));// Next process updates.adapter.Update(table.Select(null, null,DataViewRowState.ModifiedCurrent));// Finally, process inserts.adapter.Update(table.Select(null, null, DataViewRowState.Added));


pagichang 發表在 痞客邦 留言(0) 人氣()

下列範例示範如何明確設定 DataAdapterUpdateCommand,以更新已修改的資料列。請注意,UPDATE 陳述式中 WHERE 子句指定的參數是設定為使用 SourceColumnOriginal 值。這一點相當重要,因為 Current 值可能已經修改,而不符合資料來源中的值。Original 值是用來從資料來源填入 DataTable 的值。

// Assumes connection is a valid SqlConnection.SqlDataAdapter dataAdpater = new SqlDataAdapter("SELECT CategoryID, CategoryName FROM Categories", connection);dataAdpater.UpdateCommand = new SqlCommand("UPDATE Categories SET CategoryName = @CategoryName " +"WHERE CategoryID = @CategoryID" , connection);dataAdpater.UpdateCommand.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add("@CategoryID", SqlDbType.Int);parameter.SourceColumn = "CategoryID";//重點在這裡parameter.SourceVersion = DataRowVersion.Original;//還有這裡DataSet dataSet = new DataSet();dataAdpater.Fill(dataSet, "Categories");DataRow row = dataSet.Tables["Categories"].Rows[0];row ["CategoryName"] = "New Category";dataAdpater.Update(dataSet, "Categories");

pagichang 發表在 痞客邦 留言(0) 人氣()

資料庫中有些表格的某些欄位是設成Identity(種子,會自動累加),那個數字是由資料庫在進行insert時給的,也就是說要存了,才知道數值是存多少,然後更改User端畫面上那個欄位的值(如果畫面上放了那個欄位的話)

下列預存程序和程式碼範例示範如何從 Microsoft SQL Server 資料表,將自動遞增的識別項值對應回加入 DataSet 資料表的資料列中與識別 (Identity) 值對應的資料行。預存程序則用來將新資料列插入 Northwind 資料庫的 Categories 資料表,並將 Transact-SQL SCOPE_IDENTITY() 傳回的 Identity 值當成輸出參數。

pagichang 發表在 痞客邦 留言(0) 人氣()

下列範例示範如何明確設定 DataAdapterUpdateCommand,以更新已修改的資料列。請注意,UPDATE 陳述式中 WHERE 子句指定的參數是設定為使用 SourceColumnOriginal 值。這一點相當重要,因為 Current 值可能已經修改,而不符合資料來源中的值。Original 值是用來從資料來源填入 DataTable 的值。
// Assumes connection is a valid SqlConnection.SqlDataAdapter dataAdpater = new SqlDataAdapter("SELECT CategoryID, CategoryName FROM Categories", connection);dataAdpater.UpdateCommand = new SqlCommand("UPDATE Categories SET CategoryName = @CategoryName " +"WHERE CategoryID = @CategoryID" , connection);dataAdpater.UpdateCommand.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add("@CategoryID", SqlDbType.Int);parameter.SourceColumn = "CategoryID";parameter.SourceVersion = DataRowVersion.Original;DataSet dataSet = new DataSet();dataAdpater.Fill(dataSet, "Categories");DataRow row = dataSet.Tables["Categories"].Rows[0];row ["CategoryName"] = "New Category";dataAdpater.Update(dataSet, "Categories");

pagichang 發表在 痞客邦 留言(0) 人氣()

下列程式碼範例從 Microsoft SQL Server 2000 上的 Northwind 資料庫填入客戶清單,
並從存放在 Microsoft Access 2000 的 Northwind 資料庫填入訂貨清單。
填入的資料表和 DataRelation 有關,之後客戶清單便會顯示該客戶的訂貨。

pagichang 發表在 痞客邦 留言(0) 人氣()