最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用DataSet Datatable更新數(shù)據(jù)庫的三種實現(xiàn)方法

 更新時間:2014年08月27日 15:29:50   投稿:shichen2014  
這篇文章主要介紹了C#使用DataSet Datatable更新數(shù)據(jù)庫的三種實現(xiàn)方法,需要的朋友可以參考下

本文以實例形式講述了使用DataSet Datatable更新數(shù)據(jù)庫的三種實現(xiàn)方法,包括CommandBuilder 方法、DataAdapter 更新數(shù)據(jù)源以及使用sql語句更新。分享給大家供大家參考之用。具體方法如下:

一、自動生成命令的條件 CommandBuilder 方法

a)動態(tài)指定 SelectCommand 屬性

b)利用 CommandBuilder 對象自動生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。

c)為了返回構造 INSERT、UPDATE 和 DELETE 。SQL CommandBuilder 必須執(zhí)行 SelectCommand。

即:必須額外經(jīng)歷一次到數(shù)據(jù)源的行程,這可能會降低性能。這也是自動生成命令的缺點。

d)SelectCommand 還必須返回至少一個主鍵或唯一列.

當CommandBuilder和DataAdapter關聯(lián)時,就會自動生成DeleteCommand、InsertCommand 和 UpdateCommand中為空的命令。即不空的不生成。

e)必須是一個表,SELECT的不能是多個表的聯(lián)合。

動生成命令的規(guī)則:

在數(shù)據(jù)源處為表中所有 RowState 為 Added 的行插入一行(不包括標識、表達式或時間戳等列)。
為 Modified 的行更新行(列值匹配行的主鍵列值) 。
Deleted 的行刪除行(列值匹配行的主鍵列值).這就是為什么要求條件c.d

注意:

a)因為從SELECT數(shù)據(jù)到UPDATE數(shù)據(jù),中間這段時間有可能別的用戶已經(jīng)對數(shù)據(jù)進行了修改。自動生成命令這種UPDATE只對在行包含所有原始值并且尚未從數(shù)據(jù)源中刪除時更新。

b)自動命令生成邏輯為獨立表生成 INSERT、UPDATE 或 DELETE 語句,而不考慮與數(shù)據(jù)源中其他表的任何關系。因此,當調(diào)用 Update 來為參與數(shù)據(jù)庫中外鍵約束的列提交更改時,可能會失敗。若要避免這一異常,請不要使用 CommandBuilder 來更新參與外鍵約束的列,而應顯式地指定用于執(zhí)行該操作的語句。

下面是自動生成命令的例子

// Assumes that connection is a valid SqlConnection object.
SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT * FROM dbo.Customers", connection);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";

DataSet custDS = new DataSet();

connection.Open();
adapter.Fill(custDS, "Customers");

// Code to modify data in the DataSet here.

// Without the SqlCommandBuilder, this line would fail.
adapter.Update(custDS, "Customers");
connection.Close();

二、使用 DataAdapter 更新數(shù)據(jù)源

需要注意:

a)如果 SelectCommand 返回 OUTER JOIN 的結果,則 DataAdapter 不會為生成的 DataTable 設置 PrimaryKey 值。您必須自己定義PrimaryKey 以確保正確解析重復行.

b)如果對 DataSet、DataTable 或 DataRow 調(diào)用 AcceptChanges,則將使 DataRow 的所有 Original 值都將被重寫為該 DataRow 的 Current 值。如果已修改將該行標識為唯一行的字段值,那么當調(diào)用 AcceptChanges 后,Original 值將不再匹配數(shù)據(jù)源中的值。

看看下面例子:

// 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");

插入、更新和刪除的排序

在許多情況下,以何種順序向數(shù)據(jù)源發(fā)送通過 DataSet 作出的更改是相當重要的。
例如,如果已更新現(xiàn)有行的主鍵值并且添加了具有新主鍵值的新行,則務必要在處理插入之前處理更新。

可以使用 DataTable 的 Select 方法來返回僅引用具有特定 RowState 的 DataRow 數(shù)組。然后可以將返回的 DataRow 數(shù)組傳遞到 DataAdapter 的 Update 方法來處理已修改的行。通過指定要更新的行的子集,可以控制處理插入、更新和刪除的順序。

示例如下:

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));

三、使用sql語句更新

例如:

cmd = new OleDbCommand(string.Format(@"insert into worker(workerid,workername,password,phoneno) values ('{0}','{1}','{2}','{3}') ", textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text),oc);
oc.Open();
try
{
 int i = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{

}

性能的優(yōu)劣及使用的情形,還未完全明白。

一般的,綁定bindingsource,用datatable綁定bindingsource (實質(zhì)上綁定的是datatable。defaultview,同時可用到dataview的篩選功能,但是在篩選完后,filter要重置為null,否則出現(xiàn)的一直是經(jīng)過篩選的數(shù)據(jù))

其他:

使用builder 的作用:

OleDbCommandBuilder cb = new OleDbCommandBuilder(da);

這個主要是為了讓C#自動為OleDbDataAdapter da生成相對應的DeleteCommand,UpdateCommand!

希望本文所述對大家的C#數(shù)據(jù)庫程序設計有所幫助。

相關文章

  • C#簡單實現(xiàn)IOC容器的示例代碼

    C#簡單實現(xiàn)IOC容器的示例代碼

    IoC 的原理是通過將對象的創(chuàng)建和依賴關系的管理交給外部容器來實現(xiàn),從而降低了代碼的耦合度,提高了代碼的可維護性和可測試性,下面我們就來看看如何通過C#實現(xiàn)一個IOC容器吧
    2024-02-02
  • C#獲取根目錄實現(xiàn)方法匯總

    C#獲取根目錄實現(xiàn)方法匯總

    這篇文章主要介紹了C#獲取根目錄實現(xiàn)方法匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • C#實現(xiàn)json格式轉(zhuǎn)換成對象并更換key的方法

    C#實現(xiàn)json格式轉(zhuǎn)換成對象并更換key的方法

    這篇文章主要介紹了C#實現(xiàn)json格式轉(zhuǎn)換成對象并更換key的方法,涉及C#操作json格式數(shù)據(jù)的相關技巧,需要的朋友可以參考下
    2015-06-06
  • C#實現(xiàn)十進制數(shù)轉(zhuǎn)換為十六進制的幾種方式

    C#實現(xiàn)十進制數(shù)轉(zhuǎn)換為十六進制的幾種方式

    在C#中,十進制和十六進制轉(zhuǎn)換非常簡單,本文給大家介紹了C#實現(xiàn)十進制數(shù)轉(zhuǎn)換為十六進制的幾種方式,并通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • c#可以創(chuàng)建任意控件的拖動方法

    c#可以創(chuàng)建任意控件的拖動方法

    下面小編就為大家分享一篇c#可以創(chuàng)建任意控件的拖動方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • C#定時任務框架Quartz.NET介紹與用法

    C#定時任務框架Quartz.NET介紹與用法

    這篇文章介紹了C#定時任務框架Quartz.NET的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Unity3D如何獲取時間戳或北京時間

    Unity3D如何獲取時間戳或北京時間

    這篇文章主要為大家詳細介紹了Unity3D獲取時間戳或北京時間的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C#版免費離線人臉識別之虹軟ArcSoft?V3.0(推薦)

    C#版免費離線人臉識別之虹軟ArcSoft?V3.0(推薦)

    本文只是簡單介紹了如何使用虹軟的離線SDK,進行人臉識別的方法,并且是圖片的方式,本地離線識別最大的好處就是沒有延遲,識別結果立馬呈現(xiàn),對C#離線人臉識別虹軟相關知識感興趣的朋友一起看看吧
    2021-12-12
  • 詳解WPF中的對象資源

    詳解WPF中的對象資源

    這篇文章主要介紹了WPF中對象資源的相關資料,幫助大家更好的理解和學習使用WPF,感興趣的朋友可以了解下
    2021-04-04
  • C#操作注冊表的方法

    C#操作注冊表的方法

    以下從‘讀’‘寫’‘刪除’‘判斷’四個事例實現(xiàn)對注冊表的簡單操作
    2007-03-03

最新評論

出国| 江都市| 平湖市| 株洲市| 香河县| 福州市| 浪卡子县| 胶南市| 余庆县| 阿拉善左旗| 会东县| 紫阳县| 汉阴县| 贵州省| 渭源县| 息烽县| 平果县| 高阳县| 古浪县| 临汾市| 景宁| 德令哈市| 沾益县| 岳西县| 肃宁县| 北流市| 靖江市| 榆社县| 喜德县| 都兰县| 嘉荫县| 子长县| 安庆市| 蓬莱市| 莱阳市| 上饶市| 霍山县| 台安县| 宝清县| 贡山| 兰坪|