DataSet操作数据库
生活随笔
收集整理的這篇文章主要介紹了
DataSet操作数据库
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
DataSet操作數(shù)據(jù)庫
________________________________________________________________________________________________________
SqlConnection thisConnection = new SqlConnection(@"Data Source=(local);Integrated Security=SSPI;Initial Catalog=數(shù)據(jù)庫名");
thisConnection.Open();//打開數(shù)據(jù)庫連接
SqlDataAdapter 適配器一 = new SqlDataAdapter("select * from 顧客", thisConnection);
DataSet thisDataSet = new DataSet();//數(shù)據(jù)集
適配器一.Fill(thisDataSet, "表名");//填充數(shù)據(jù)集
thisDataSet.Tables["表名"].Rows[0]["列名"]="更新";//在內(nèi)存中更新數(shù)據(jù)
thisAdapter.Update(thisDataSet, "表名");//更新數(shù)據(jù)庫
thisConnection.Close();//關(guān)閉數(shù)據(jù)庫連接
********************************************************************************************************
ADO.net的主要對象元素:_______________________________________________________________________________________________________
1.添加記錄 (添加行)
??添加記錄首先需要聲明兩個變量 DataTable ,DataRow
??其中DataTable需要實例化到具體的數(shù)據(jù)集中的某個table
??DataRow = DataTable.NewRow()??聲明為Table的新Row
??再對DataRow進行賦值,調(diào)用DataTable.Rows.Add(DataRow)即可
????????????DataColumn[] keys = new DataColumn[1];
????????????keys[0] = thisDataSet.Tables["表名"].Columns["列名"];
________________________________________________________________________________________________________
2.刪除紀(jì)錄?
??如下 DataTable.Rows[5].Delete();?
??推想:應(yīng)該可以這樣,首先申明一個變量 DataRow[] objRows 用來存儲要刪除的行
??objRows = DataTable.Select("查詢條件");
??thisDataSet.Tables["表名"].PrimaryKey = keys;//設(shè)置主鍵,可以定義多個主鍵,無非就是keys[0]、key[1]、key[2]...多定義幾個就可以了
??DataRow findRow = thisDataSet.Tables["表名"].Rows.Find("列數(shù)據(jù)");//查找行,這種方法只能用于查找主鍵,也就是在表中惟一地標(biāo)識行的值或值集合
??if (findRow == null)
??{
????Console.WriteLine("未找到,將添加行");
????DataRow thisRow = thisDataSet.Tables["表名"].NewRow();
????thisRow["列名"] = "新數(shù)據(jù)";
????thisDataSet.Tables["表名"].Rows.Add(thisRow);//添加行
??}
??else if (findRow != null)
{
????Console.WriteLine("找到,將刪除行");
????findRow.Delete();
??}
??thisAdapter.Update(thisDataSet, "表名");//更新數(shù)據(jù)庫
________________________________________________________________________________________________________
3.修改紀(jì)錄 (編輯行)
??首先聲明一個變量 DataRow[] objRows用來存儲要編輯的行
??objRows = DataTable.Select("查詢條件");?
??如果是一行,可以這樣 objRows = DataTable.Rows[3];
??再對其進行修改 如 objRows[0][FIELD1]=""??objRows[0][FIELD2]=""
????????????thisDataSet.Tables["表名"].Rows[0]["列名"] = "更新";//在內(nèi)存中更新數(shù)據(jù)
????????????thisAdapter.Update(thisDataSet, "表名");//更新數(shù)據(jù)庫
實際上Delete()等方法并不執(zhí)行刪除等操作,它僅僅標(biāo)記要刪除的行,在Rows集合中的每一個DateRow對象都有RowState,它跟蹤記錄此行是被刪除、添加、修改,還是不變,實際上在此中的操作全部在內(nèi)存中進行,而Update()方法才真正更新數(shù)據(jù)庫。Delete()方法將行的RowState設(shè)置為Deleted,然后Update()就在數(shù)據(jù)庫中將在Rows集合中標(biāo)記為Deleted的所有行刪除。
Visual Studio.NET在線文檔會提示您在執(zhí)行Delete()方法之后調(diào)用DataSet的AcceptChanges()方法;但是,這僅能刪除DataSet中的行,卻不影響數(shù)據(jù)庫中的行,因為Update()僅影響在Rows集合中找到的行,遺漏的行將被忽略掉。如果希望在數(shù)據(jù)庫中刪除行,則不要在調(diào)用Update()之前調(diào)用AcceptChanges()方法。
這個問題也適用于Remove()方法;僅當(dāng)希望從DataSet的Rows集合中,而不是數(shù)據(jù)庫中刪除行時才調(diào)用它。
________________________________________________________________________________________________________
3.表查詢
????????????DataRow[] 權(quán)限清單Row = this.superCargoDataSet.Tables["權(quán)限清單"].Select("操作員ID=" + 操作員ID);
------------------------
????????????OleDbCommand thisCommand=thisConnection.CreateCommand(); //
????????????thisCommand.CommandText="Select * FROM 表名";
????????????OleDbDataReader thisReader=thisCommand.ExecuteReader();
????????????while(thisReader.Read())
????????????{
????????????Console.WriteLine("/t{0}/t{1}",thisReader["ID"],thisReader["TheName"]);
????????????}
????????????thisReader.Close();
????????????/*--------------前提--------------*/
????????????SqlDataAdapter thisAdapter = new SqlDataAdapter("select * from 表名", thisConnection); //適配器
????????????SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);//將命令構(gòu)造器與適配器關(guān)聯(lián),用于自動生成SQL語句
????????????DataSet thisDataSet = new DataSet();//數(shù)據(jù)集
????????????thisAdapter.Fill(thisDataSet, "表名");//填充數(shù)據(jù)集
????????????Console.WriteLine("輸出數(shù)據(jù):{0}", thisDataSet.Tables["表名"].Rows[0]["列名"]);//輸出數(shù)據(jù)
________________________________________________________________________________________________________
5.創(chuàng)建表關(guān)系
????????????SqlDataAdapter 適配器一 = new SqlDataAdapter("select * from 顧客", thisConnection);
????????????SqlDataAdapter 適配器二 = new SqlDataAdapter("select * from 訂單明細", thisConnection);
????????????適配器一.Fill(thisDataSet, "顧客");//填充
????????????適配器二.Fill(thisDataSet, "訂單明細");//填充
????????????//創(chuàng)建關(guān)系
????????????DataRelation 關(guān)系 = thisDataSet.Relations.Add("顧客和訂單", thisDataSet.Tables["顧客"].Columns["顧客ID"], thisDataSet.Tables["訂單明細"].Columns["顧客ID"]);//父列必須位于子列之前
????????????//在這以后加一句??顧客和訂單.Nested=true; 將會在以后的WriteXml()方法中,將子表記錄嵌套在文件中,如將在輸出XML中將購貨明細表輸出在購貨記錄下
????????????//使用關(guān)系
????????????foreach (DataRow custRow in thisDataSet.Tables["顧客"].Rows)
????????????{
????????Console.WriteLine("顧客ID:"+custRow["顧客ID"]+"??名字:"+custRow["名字"]);
????????????????foreach (DataRow orderRow in custRow.GetChildRows(顧客和訂單))
????????????????{
????????Console.WriteLine("??????訂單:"+orderRow["訂單內(nèi)容"]);
????????????????}
????????????}?
________________________________________________________________________________________________________
SqlConnection thisConnection = new SqlConnection(@"Data Source=(local);Integrated Security=SSPI;Initial Catalog=數(shù)據(jù)庫名");
thisConnection.Open();//打開數(shù)據(jù)庫連接
SqlDataAdapter 適配器一 = new SqlDataAdapter("select * from 顧客", thisConnection);
DataSet thisDataSet = new DataSet();//數(shù)據(jù)集
適配器一.Fill(thisDataSet, "表名");//填充數(shù)據(jù)集
thisDataSet.Tables["表名"].Rows[0]["列名"]="更新";//在內(nèi)存中更新數(shù)據(jù)
thisAdapter.Update(thisDataSet, "表名");//更新數(shù)據(jù)庫
thisConnection.Close();//關(guān)閉數(shù)據(jù)庫連接
********************************************************************************************************
ADO.net的主要對象元素:_______________________________________________________________________________________________________
1.添加記錄 (添加行)
??添加記錄首先需要聲明兩個變量 DataTable ,DataRow
??其中DataTable需要實例化到具體的數(shù)據(jù)集中的某個table
??DataRow = DataTable.NewRow()??聲明為Table的新Row
??再對DataRow進行賦值,調(diào)用DataTable.Rows.Add(DataRow)即可
????????????DataColumn[] keys = new DataColumn[1];
????????????keys[0] = thisDataSet.Tables["表名"].Columns["列名"];
________________________________________________________________________________________________________
2.刪除紀(jì)錄?
??如下 DataTable.Rows[5].Delete();?
??推想:應(yīng)該可以這樣,首先申明一個變量 DataRow[] objRows 用來存儲要刪除的行
??objRows = DataTable.Select("查詢條件");
??thisDataSet.Tables["表名"].PrimaryKey = keys;//設(shè)置主鍵,可以定義多個主鍵,無非就是keys[0]、key[1]、key[2]...多定義幾個就可以了
??DataRow findRow = thisDataSet.Tables["表名"].Rows.Find("列數(shù)據(jù)");//查找行,這種方法只能用于查找主鍵,也就是在表中惟一地標(biāo)識行的值或值集合
??if (findRow == null)
??{
????Console.WriteLine("未找到,將添加行");
????DataRow thisRow = thisDataSet.Tables["表名"].NewRow();
????thisRow["列名"] = "新數(shù)據(jù)";
????thisDataSet.Tables["表名"].Rows.Add(thisRow);//添加行
??}
??else if (findRow != null)
{
????Console.WriteLine("找到,將刪除行");
????findRow.Delete();
??}
??thisAdapter.Update(thisDataSet, "表名");//更新數(shù)據(jù)庫
________________________________________________________________________________________________________
3.修改紀(jì)錄 (編輯行)
??首先聲明一個變量 DataRow[] objRows用來存儲要編輯的行
??objRows = DataTable.Select("查詢條件");?
??如果是一行,可以這樣 objRows = DataTable.Rows[3];
??再對其進行修改 如 objRows[0][FIELD1]=""??objRows[0][FIELD2]=""
????????????thisDataSet.Tables["表名"].Rows[0]["列名"] = "更新";//在內(nèi)存中更新數(shù)據(jù)
????????????thisAdapter.Update(thisDataSet, "表名");//更新數(shù)據(jù)庫
實際上Delete()等方法并不執(zhí)行刪除等操作,它僅僅標(biāo)記要刪除的行,在Rows集合中的每一個DateRow對象都有RowState,它跟蹤記錄此行是被刪除、添加、修改,還是不變,實際上在此中的操作全部在內(nèi)存中進行,而Update()方法才真正更新數(shù)據(jù)庫。Delete()方法將行的RowState設(shè)置為Deleted,然后Update()就在數(shù)據(jù)庫中將在Rows集合中標(biāo)記為Deleted的所有行刪除。
Visual Studio.NET在線文檔會提示您在執(zhí)行Delete()方法之后調(diào)用DataSet的AcceptChanges()方法;但是,這僅能刪除DataSet中的行,卻不影響數(shù)據(jù)庫中的行,因為Update()僅影響在Rows集合中找到的行,遺漏的行將被忽略掉。如果希望在數(shù)據(jù)庫中刪除行,則不要在調(diào)用Update()之前調(diào)用AcceptChanges()方法。
這個問題也適用于Remove()方法;僅當(dāng)希望從DataSet的Rows集合中,而不是數(shù)據(jù)庫中刪除行時才調(diào)用它。
________________________________________________________________________________________________________
3.表查詢
????????????DataRow[] 權(quán)限清單Row = this.superCargoDataSet.Tables["權(quán)限清單"].Select("操作員ID=" + 操作員ID);
------------------------
????????????OleDbCommand thisCommand=thisConnection.CreateCommand(); //
????????????thisCommand.CommandText="Select * FROM 表名";
????????????OleDbDataReader thisReader=thisCommand.ExecuteReader();
????????????while(thisReader.Read())
????????????{
????????????Console.WriteLine("/t{0}/t{1}",thisReader["ID"],thisReader["TheName"]);
????????????}
????????????thisReader.Close();
????????????/*--------------前提--------------*/
????????????SqlDataAdapter thisAdapter = new SqlDataAdapter("select * from 表名", thisConnection); //適配器
????????????SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);//將命令構(gòu)造器與適配器關(guān)聯(lián),用于自動生成SQL語句
????????????DataSet thisDataSet = new DataSet();//數(shù)據(jù)集
????????????thisAdapter.Fill(thisDataSet, "表名");//填充數(shù)據(jù)集
????????????Console.WriteLine("輸出數(shù)據(jù):{0}", thisDataSet.Tables["表名"].Rows[0]["列名"]);//輸出數(shù)據(jù)
________________________________________________________________________________________________________
5.創(chuàng)建表關(guān)系
????????????SqlDataAdapter 適配器一 = new SqlDataAdapter("select * from 顧客", thisConnection);
????????????SqlDataAdapter 適配器二 = new SqlDataAdapter("select * from 訂單明細", thisConnection);
????????????適配器一.Fill(thisDataSet, "顧客");//填充
????????????適配器二.Fill(thisDataSet, "訂單明細");//填充
????????????//創(chuàng)建關(guān)系
????????????DataRelation 關(guān)系 = thisDataSet.Relations.Add("顧客和訂單", thisDataSet.Tables["顧客"].Columns["顧客ID"], thisDataSet.Tables["訂單明細"].Columns["顧客ID"]);//父列必須位于子列之前
????????????//在這以后加一句??顧客和訂單.Nested=true; 將會在以后的WriteXml()方法中,將子表記錄嵌套在文件中,如將在輸出XML中將購貨明細表輸出在購貨記錄下
????????????//使用關(guān)系
????????????foreach (DataRow custRow in thisDataSet.Tables["顧客"].Rows)
????????????{
????????Console.WriteLine("顧客ID:"+custRow["顧客ID"]+"??名字:"+custRow["名字"]);
????????????????foreach (DataRow orderRow in custRow.GetChildRows(顧客和訂單))
????????????????{
????????Console.WriteLine("??????訂單:"+orderRow["訂單內(nèi)容"]);
????????????????}
????????????}?
轉(zhuǎn)載于:https://www.cnblogs.com/kevinzhwl/archive/2010/07/08/3878914.html
總結(jié)
以上是生活随笔為你收集整理的DataSet操作数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebNumericEdit
- 下一篇: 读论语