国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
ado.net大全

ado.net大全

對(duì)象體系:connection->data adapter->dataset->winform可逆

                 connection->command->webform 可逆
                                          |
                                  ->datareader->other
        dataset->datatable->datacolumn->datarow
connection:實(shí)現(xiàn)與數(shù)據(jù)源連接
dataset:ado.net核心地位,它實(shí)現(xiàn)與數(shù)據(jù)源無(wú)關(guān)性。

command:包含實(shí)際數(shù)據(jù)庫(kù)信息,如查詢、修改、調(diào)用存儲(chǔ)過程。
dataadapter:是數(shù)據(jù)源與dataset的橋。它用command將結(jié)果傳給dataset,并將dataset
                   中的數(shù)據(jù)改動(dòng)回饋給數(shù)據(jù)源。
datareader:簡(jiǎn)單、不要求回傳更新數(shù)據(jù)的查詢。



dim connection con=new connection
dim datasetcommand cmd=new datasetcommand(sqltxt,con)
dim dataset ds =new dataset()
cmd.filldataset(ds,"students")

dataadapter.selectcommand;insertcommand;deletecommand;updatacommand;
                  tablemappings?
必須顯示的關(guān)閉連接。


'返回不同類型值
cmd.executereader;;;;;;;;;;;cmd.executenonquery;;;;;;;;;;;;;;;cmd.executescalar

‘存儲(chǔ)過程
sqlcmd=sqlconn.createcommand()
sqlcmd.commandtext="queryauthor"
sqlcmd.commandtype=commandtype.storedprocedure
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sqlcmd.parameters.add("@author",sqldbtype.naarchar).value="qiyuan"
向存儲(chǔ)過程傳遞參數(shù)。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

指令
dim datareader sqldr =cmd.executereader()

ngets=sqldr.getvalues(cols)

while sqldr.read()
for i=0 to ngets-1
sqldr[i].tostring()
next i



connection conn=new connection()
dataadapter adapte=new dataadapter()
adapter.selectcommand=new oledbcommand(sqltxt,conn)
           .insercommand
           .updatecommand
           .deletecommand

dapter.fill(dataset)
return dataset

adapter.updata


ado.net and sql:

ADO.NET Managed Provider

ADO.NET SQL Managed Provider

需要引入的Namespace

System.Data.ADO

System.Data.SQL

Connection對(duì)象

ADOConnection

SQLConnection

Command對(duì)象

ADODatasetCommand

SQLDatasetCommand

Dataset對(duì)象

Dataset

Dataset

DataReader

ADODataReader

SQLDataReader

連接數(shù)據(jù)庫(kù)例子

String sConnectionString = "Provider= SQLOLEDB.1;

Data Source=localhost;

uid=sa; pwd=; Initial Catalog=pubs";

 

ADOConnection con = new ADOConnection(sConnectionString);

con.Open();

String sConnectionString = "server=localhost;uid=sa;pwd=;database=pubs";

SQLConnection con = new SQLConnection(sConnectionString);

con.Open();

 

執(zhí)行SQL語(yǔ)句例子

ADOCommand cmd = new ADOCommand("SELECT * FROM Authors", con);

ADODataReader dr = new ADODataReader();

cmd.Execute(out dr);

SQLCommand cmd = new SQLCommand(("SELECT * FROM Authors", con);

SQLDataReader dr = new SQLDataReader();

cmd.Execute(out dr);

使用存儲(chǔ)過程例子

ADOCommand cmd = new ADOCommand ("spGetAuthorByID", con);

cmd.CommandType = CommandType.StoredProcedure;

 

ADOParameter prmID = new ADOParameter("AuthID",

ADODataType.VarChar, 11);

 

prmID.Value = "111-11-1111";

 

cmd.SelectCommand.Parameters.Add(prmID);

 

ADODataReader dr;

cmd.Execute (out dr);

SQLCommand cmd = new SQLCommand("spGetAuthorByID", con);

cmd.CommandType = CommandType.StoredProcedure;

 

SQLParameter prmID = new SQLParameter("@AuthID",

SQLDataType.VarChar,11);

 

prmID.Value = "111-11-1111"

cmd.SelectCommand.Parameters.Add(prmID);

SQLDataReader dr;

cmd.Execute(out dr);



3.3.1從數(shù)據(jù)庫(kù)得到DataSets的使用

       使用一個(gè)從數(shù)據(jù)庫(kù)獲得的DataSets較為復(fù)雜,它的步驟大概如下:

 

1.       使用SQLDataSetCommand命令(SQL方式)或者ADODataSetCommand命令(ADO方式)從數(shù)據(jù)庫(kù)管理系統(tǒng)中獲取一個(gè)表結(jié)構(gòu)及其數(shù)據(jù)填充到本地內(nèi)存的DataSet的一個(gè)表中。

 

例如:

·Ado方式

Dim MyDsComm As New ADODataSetCommand

Dim MyComm As ADOCommand

Dim MyConn As ADOConnection

 

MyConn = New ADOConnection _

("Provider=SQLOLEDB.1;Initial Catalog=Northwind;" & _

"Data Source=(local);User ID=sa;")

 

MyComm = New ADOCommand("SELECT * FROM Customers", MyConn)

MyDsComm.SelectCommand = MyComm

 

·SQL方式

Dim MyConn as SQLConnection

Dim MyComm as SQLDataSetCommand

Dim MyDs as New DataSet

 

MyConn=New SQLConnection(“server=localhost;uid=sa;pwd=;database=pubs”)

MyComm=New SQLDataSetCommand(“Select * from authoers”,MyConn)

MyComm.FillDataSet(Myds,”authers”)

 

 

2.對(duì)DataSet中的表對(duì)象DataTable的數(shù)據(jù)進(jìn)行操作,包括增加、刪除、修改它的DataRow對(duì)象

 

3.使用GetChanges方法產(chǎn)生一個(gè)DataSet修改后的對(duì)象的DataSet集合。

 

代碼如下:

Dim changedDataSet As DataSet

changedDataSet = ds.GetChanges(DataRowState.Modified)

 

4.通過對(duì)產(chǎn)生的DataSet對(duì)象的HasErrors屬性的監(jiān)控,查看是否DataSet中的表有錯(cuò)誤發(fā)生。

 

5.如果有錯(cuò)誤發(fā)生,就要對(duì)DataSet中的各個(gè)表進(jìn)行錯(cuò)誤檢查,方法一樣,也是根據(jù)各個(gè)DataTableHasErrors屬性。如果表中有錯(cuò)誤發(fā)生,那么GetErrors方法就會(huì)被激活,并且會(huì)返回一個(gè)含有錯(cuò)誤的DataRow對(duì)象的數(shù)組。

 

6.當(dāng)表出錯(cuò)時(shí),對(duì)于每一個(gè)DataRow對(duì)象的RowError屬性進(jìn)行檢測(cè)。

 

7.如果可能,處理發(fā)生的錯(cuò)誤。

 

8.使用DataSet對(duì)象的Merge方法把檢測(cè)無(wú)錯(cuò)誤發(fā)生的修改后的DataSet合并入原先的DataSet中,代碼如下:

 

ds.Merge(changedDataSet)

 

9.使用DataSetCommand對(duì)象的update方法,把合并后的DataSet對(duì)象送往數(shù)據(jù)庫(kù)端進(jìn)行修改,代碼如下:

 

               MyDataSetCommand.Update(ds)

 

10.使用DataSet對(duì)象的AcceptChanges方法對(duì)數(shù)據(jù)庫(kù)修改進(jìn)行確認(rèn),或者使用RejectChanges方法撤消對(duì)數(shù)據(jù)庫(kù)的修改,代碼如下:

 

        Ds.AcceptChanges

 

3.3.3.2編程實(shí)現(xiàn)DataSet

1.使用DataSet()創(chuàng)建器創(chuàng)立一個(gè)DataSet對(duì)象。

DataSet()可以跟一個(gè)字符串用以指明創(chuàng)建的DataSet名字

 

Dim ds1 as New DataSet

Dim ds2 as New DataSet(“MyDataSet”)

 

       2.增加一個(gè)DataTableDataSet中。

              具體操作是,首先在DataSet對(duì)象的Tables集合中,增加一個(gè)表

              ds.Tables.Add(New DataTable(表名))

              然后,再在該表中的Columns集合中增加相應(yīng)的列

        ds.Tables(表名).Columns.Add(列名,列類型)

             

       例如:我們?cè)?/span>ds對(duì)象中建立一個(gè)訂購(gòu)表(Order),它有三個(gè)字段,客戶名(CUNM)、訂貨編號(hào)(ORNO)、訂貨數(shù)量(ORNM

 

              ds.Tables.Add(New DataTable(“Order”))

 

        ds.Tables(“Order”).Columns.Add(“CUNM”,GetType(String))

      ds.Tables(“Order”).Columns.Add(“ORNO”,GetType(String))

           ds.Tables(“Order”).Columns.Add(“ORNM”,GetType(int32))

 

           ds.Tables(“Order”).PrimaryKey=

                                       New DataColumn(ds.Tables(“Order”).Columns(“ORNO”)

    在上面的例子中,我們還設(shè)置了訂購(gòu)表的鍵值,這是通過對(duì)它的PrimaryKey的屬性設(shè)置來得到的,設(shè)置鍵值的好處在于可以防止相同記錄的輸入,保證數(shù)據(jù)的唯一性。

 

3.設(shè)置表間的關(guān)系

    由于DataSet對(duì)象中可以含有多個(gè)DataTable,而事實(shí)上每一個(gè)表又不可能與其他的表沒有任何的關(guān)系,這樣就帶來了一個(gè)問題,我們?nèi)绾蚊枋鰞蓚€(gè)不同的表之間的關(guān)系?asp.net提供了DataRelation對(duì)象來描述表和表之間的關(guān)系。DataRelation對(duì)象至少需要兩個(gè)參數(shù)才能確定兩個(gè)表之間的關(guān)系,這是因?yàn)樵趦蓚€(gè)表的關(guān)系中,至少需要一個(gè)主鍵列和一個(gè)外鍵列,才能確定兩者之間的對(duì)應(yīng)關(guān)系。

    例如:關(guān)于客戶購(gòu)物有兩個(gè)表,一個(gè)是客戶信息表(Customer),一個(gè)是購(gòu)物信息表(Order),很顯然它們兩者之間存在著某種聯(lián)系。經(jīng)過分析,我們發(fā)現(xiàn)客戶編號(hào)(CUNO)在兩個(gè)表中都存在,它使我們能夠把兩個(gè)表的信息連接起來,告訴我們這樣一個(gè)事實(shí),誰(shuí)訂購(gòu)了什么物品。因此需要建立關(guān)于客戶信息表和購(gòu)物信息表的一個(gè)聯(lián)系,用Asp.net語(yǔ)言表達(dá)如下:

    Dim ds as DataSet

  …

  ds.Relations.Add(“CustomerOrder”,ds.Tables(“Customer”).Columns(“CUNO”),

                                                                   ds.Tables(“Order”).Columns(“CUNO”))

 

4.在關(guān)系表間的瀏覽

 

    通過DataRelaiton的設(shè)置,我們可以在同一個(gè)DataSet中,由對(duì)一個(gè)表操作,找到可能引起的相關(guān)表的變化。例如,對(duì)于客戶信息表中的對(duì)應(yīng)于某個(gè)人的一條記錄,我們可以在購(gòu)貨信息表中找到所有屬于他的購(gòu)貨信息,演示代碼如下:

dim orderRows() as DataRow

   orderRows=ds.Tables(“Customer”).ChildRelations(“CustomerOrder”).GetChildRows(

                                                                   ds.Tables(“Customer”).Rows(0))

 

5.?dāng)?shù)據(jù)約束的使用

    在關(guān)系數(shù)據(jù)庫(kù)中,使用數(shù)據(jù)約束的目的是為了使數(shù)據(jù)庫(kù)的一致性得到保證。當(dāng)數(shù)據(jù)發(fā)生改變時(shí),數(shù)據(jù)約束被執(zhí)行,用以檢查對(duì)數(shù)據(jù)的修改,是否和已經(jīng)定義的規(guī)則相符合,如果不符合修改將不能生效。在asp.net中提供了兩種數(shù)據(jù)約束,ForeignKeyConstraintUniqueConstraint

 

    ForeignKeyConstraint,外鍵值一致性約束,定義當(dāng)表中的一條記錄被刪除或者是增加一條記錄時(shí),與該表相關(guān)的其他表的相應(yīng)記錄如何處理。例如,當(dāng)一個(gè)客戶被人從客戶信息表中刪去,那么在購(gòu)物信息表中的關(guān)于他的購(gòu)物信息的記錄如何處理等等。

    ForeignKeyConstraint有五個(gè)可能的值如下:

    ·Cascade     當(dāng)表中記錄被刪除或者更新以后,對(duì)應(yīng)表中的記錄相應(yīng)被刪除和更新

    ·SetNull       當(dāng)表中記錄被刪除或者更新以后,對(duì)應(yīng)表中的記錄被置為Null

    ·SetDefault 當(dāng)表中記錄被刪除或者更新以后,對(duì)應(yīng)表中的記錄被置為缺省值

    ·None        當(dāng)表中記錄被刪除或者更新以后,對(duì)應(yīng)表中的記錄不做任何處理

    ·Default       當(dāng)表中記錄被刪除或者更新以后,ForeignKeyConstraint采用其缺省值,通常該值為Cascade

    具體使用ForeigKeyConstraint時(shí),首先應(yīng)創(chuàng)建它,然后設(shè)置DeleteRuleUpDateRule屬性,指明當(dāng)刪除和更新記錄時(shí),對(duì)應(yīng)表的處理規(guī)則。

   

    例子:我們對(duì)客戶信息表定義一個(gè)外鍵定義,它定義當(dāng)客戶信息表中記錄刪除時(shí),其關(guān)聯(lián)表購(gòu)物信息表中的數(shù)據(jù)也應(yīng)刪除(意味著用戶不存在,自然也不應(yīng)該有他的購(gòu)物信息),當(dāng)客戶信息表中記錄被修改時(shí),購(gòu)物信息置為缺省的特殊值(意味著,當(dāng)銷售人員發(fā)生差錯(cuò),記錯(cuò)購(gòu)物用戶,那么以他的名義購(gòu)物的定單不應(yīng)算在該用戶頭上,置為特殊標(biāo)記,以供今后修改),代碼演示如下:

 

dim fk as New ForeignKeyConstraint(ds.Tables(“Customer”).Columns(“CUNO”),

                                                                   ds.Tables(“Order”.Columns(“CUNO”))

創(chuàng)建外鍵約束為Customer表和Order表中CUNO字段

fk.DeleteRule=Cascade

fk.UpdateRule=SetDefault

刪除規(guī)則為Cascade,修改規(guī)則為SetDefault

ds.Tables(“Customer”).Constraints.Add(fk)

加入Customer表的一致性約束集合中

 

    UniqueConstraint,唯一性約束,它指定了數(shù)據(jù)表中的一個(gè)列或者幾個(gè)列的集合的值的唯一性,通常被指定為唯一約束的字段都是表的鍵值。

    例如:對(duì)于客戶信息表,因?yàn)槊總€(gè)人的購(gòu)物都必須和別人區(qū)別,這樣才能保證正確地付款和發(fā)送貨物,因而每一個(gè)人的客戶編號(hào)都不應(yīng)該相同,這時(shí)就可以使用唯一性約束來保證客戶信息表中的客戶編號(hào)唯一。演示代碼如下:

   

dim uc as UniqueConstraint

uc=New UniqueConstraint(ds.Tables(“Customer”).Columns(“CUNO”))

指定唯一約束為Customer表中的CUNO字段

ds.Tables(“Customer”).Constraints.Add(uc)

把唯一約束加入Customer表的約束中

 

6.處理DataSet的事件

    為了便于用戶對(duì)DataSet的控制,asp.net提供了DataSet的一系列可被用戶處理的事件,它們包括:

           ·PropertyChange   當(dāng)屬性發(fā)生改變時(shí)

           ·MergeFailed         DataSet合并失敗時(shí)

           ·RemoveTable     刪除一個(gè)表時(shí)

           ·RemoveRelation   刪除一個(gè)關(guān)系時(shí)

           ·Adding the event handler to the event 增加一個(gè)事件處理函數(shù)時(shí)

 

例如:

ds.AddOnPropertyChange(new System.ComponentModel.PropertyChangeEventHandler _

(AddressOf me.DataSetPropertyChange))

指定當(dāng)DataSet發(fā)生PropertyChange事件時(shí)的消息處理函數(shù)為DataSetPropertyChange

ds.AddOnMergeFailed(new System.Data.MergeFailedEventHandler _

(AddressOf me.DataSetMergeFailed))

指定當(dāng)DataSet發(fā)生MergeFailed事件時(shí)的消息處理函數(shù)為DataSetMergeFailed

 

當(dāng)PropertyChange發(fā)生時(shí)的處理函數(shù)

Private Sub DataSetPropertyChange _

   (ByVal sender As Object, ByVal e As System.PropertyChangeEventArgs)

   …

End Sub

 

當(dāng)MergeFailed發(fā)生時(shí)的處理函數(shù)

Private Sub DataSetMergeFailed _

   (ByVal sender As Object, ByVal e As System.Data.MergeFaileedEventArgs)

  …

End Sub

 



3.3.3.4數(shù)據(jù)的載入

l         向表中加入數(shù)據(jù)

當(dāng)一個(gè)表結(jié)構(gòu)已經(jīng)創(chuàng)建好以后,剩下的問題就是如何把數(shù)據(jù)載入我們已經(jīng)建立好的表中。通常采用的方法是,先創(chuàng)建一個(gè)DataRow對(duì)象,它類似于數(shù)據(jù)庫(kù)概念中的記錄,然后對(duì)DataRowColumns集合進(jìn)行賦值,最后把DataRow對(duì)象加入到DataTableDataRows集合中,就相當(dāng)于在表中插入一條記錄。

      

       例如:如下一個(gè)表MyTable中有兩個(gè)列SqnoName,Sqno為序號(hào),Name設(shè)為”MyName”+序號(hào),我們利用一個(gè)循環(huán)產(chǎn)生n條記錄到MyTable

 

Dim i as integer

Dim n as integer

Dim MyRow as DataRow

 …

  For i = 0 to n

   MyRow = MyTable.NewRow()

       ‘產(chǎn)生一條新記錄

   MyRow("Sqno") = I

  ‘對(duì)sqno字段賦值

   MyRow("Name") = "MyName" & i.ToString()

  ‘對(duì)name字段賦值

   MyTable.Rows.Add(MyRow)

    ‘加入記錄到表中

  Next

 

l         刪除表中記錄

       DataTableRows集合提供了兩種方法從一個(gè)數(shù)據(jù)表中刪除一條記錄,它們是Remove方法和Delete方法。示例如下:

       刪除MyTable中的第三條記錄:

       MyTable.Rows.Remove(3)或者

       MyTable.Rows(3).Delete

      

       Delete方法和Remove方法的區(qū)別不僅僅是方法的使用形式上。當(dāng)調(diào)用Remove方法后,那么指定的DataRow就會(huì)從Rows集合中被刪除。而Delete方法調(diào)用時(shí),指定的DataRow并不真正從Rows集合中刪除,只是作了一個(gè)刪除標(biāo)記,直到DataSet對(duì)象調(diào)用AcceptChanges方法的時(shí)候,才真正被刪除;如果是RejectChanges方法被調(diào)用,那么Delete方法刪除的DataRow對(duì)象將被恢復(fù)。

 

l         使用表中的數(shù)據(jù)

 

       對(duì)于DataTable中的每一個(gè)Row,它都可能有三種狀態(tài):Original、CurrentPreposed。Original狀態(tài)是指當(dāng)數(shù)據(jù)第一次被加入到數(shù)據(jù)表中時(shí)候的狀態(tài)。Current態(tài)指經(jīng)過多次改變Original數(shù)據(jù)后得到的Row。Preposed態(tài)存在于一個(gè)相當(dāng)短暫的時(shí)期,它是由original態(tài)過渡到Current態(tài)時(shí)的中間狀態(tài),一個(gè)明顯的例子是對(duì)數(shù)據(jù)進(jìn)行修改而尚未完成時(shí),開始是Original態(tài),完成后是Current態(tài),而這之間就是Preposed態(tài)。

 

       為了說明對(duì)表中數(shù)據(jù)的使用,我們來看下面一個(gè)例子,它是對(duì)workTable按每一個(gè)字段進(jìn)行遍歷,并把字段名和內(nèi)容顯示出來。

 

Dim CurrRows() As DataRow = workTable.Select(Nothing, Nothing, _

                                        System.Data.DataViewRowState.CurrentRows)

‘對(duì)workTable數(shù)據(jù)集合選擇有效的DataRows放入CurrRows數(shù)組

Dim list As String = System.String.Empty

清空list字符串

Dim RowNo As Integer

Dim ColNo As Integer

 

For RowNo = 0 to CurrRows.Count – 1

每一條記錄的循環(huán)

 

   For ColNo = 0 To workTable.Columns.Count 1

       ‘一條記錄中每一個(gè)字段的循環(huán)

      list = ""

      list &= workTable.Columns(colNo).ColumnName & " = " & _

         CurrRows(RowNo)(ColNo).ToString

      Console.WriteLine(list)

   Next

Next

 

If CurrRows.Count < 1 Then Console.WriteLine("No CurrentRows Found")

從上面的例子我們可以看出,對(duì)Rows集合使用DataTableSelect方法可以找出有效的Rows集合,然后根據(jù)Rows.countcolumns.count可以確定有效的記錄數(shù)和字段數(shù),最后利用記錄索引值和列索引值可以唯一確定數(shù)據(jù)表中的任何數(shù)據(jù)。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ado.net題目含答案
VB.net數(shù)據(jù)庫(kù)編程(09):ADO.net數(shù)據(jù)接口(下)
C#
C#數(shù)據(jù)庫(kù)操作
掌握ADO.NET的十個(gè)熱門技巧
DataGridView的添加、編輯、更新 - 太上老君的日志 - 網(wǎng)易博客
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服