一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VB.net數(shù)據(jù)庫(kù)編程(08):ADO.net數(shù)據(jù)訪(fǎng)問(wèn)接口

 百眼通 2014-10-31

編程語(yǔ)言與數(shù)據(jù)庫(kù)的連接是通過(guò)一個(gè)接口,達(dá)到兩者交流,以便兩者談情說(shuō)愛(ài)。

一、接口種類(lèi):6種:

        1、ODBC,面向C/C++。

        2、DAO,   面向VB,操作ACCEss

        3、RDO,上面的加強(qiáng)型

        4、OLE DB

        5、ADO,      對(duì)OLE DB的加強(qiáng)型

         6、ADO.net,    ADO的加強(qiáng)型。


二、ADO.net概述:

        Ado.net基于XML和離線(xiàn)計(jì)算模型。

        ADO以Recorderset存儲(chǔ),類(lèi)似單表,若要多表就要多表連接。必須在線(xiàn)

        ADO.net可以在線(xiàn)或離線(xiàn),DataSet直接可以是多表。

        ADO使用Com技術(shù),ADO.net基于XML格式,數(shù)據(jù)類(lèi)型更豐富。


         體系結(jié)構(gòu)如下:

          

          ADO.net的兩個(gè)核心組件:.Net數(shù)據(jù)提供程序(左)、DataSet(右)。

          .net數(shù)據(jù)提供程序用來(lái)與數(shù)據(jù)庫(kù)的連接。包括Connection,Command,DataReader,DataAdapter四個(gè)。

           DataSet用來(lái)與XML數(shù)據(jù)連接。設(shè)計(jì)的目的是獨(dú)立于任何數(shù)據(jù)源的數(shù)據(jù)訪(fǎng)問(wèn),可有多種不同數(shù)據(jù),也可用于XML數(shù)據(jù)。

           

           DataSet

           它內(nèi)部用XML描述數(shù)據(jù),與平臺(tái)無(wú)關(guān)。其內(nèi)常用對(duì)象是DataTable和DataRow等。DataSet通過(guò)DataAdapter獲得數(shù)據(jù),

           DataAdapter就是DataSet與數(shù)據(jù)庫(kù)之間的橋梁,也就是前面的搬運(yùn)工。它把數(shù)據(jù)庫(kù)中的結(jié)果集搬運(yùn)到本地緩存中,這樣

           就可與數(shù)據(jù)離線(xiàn),直接處理DataSet,處理完后,再連接,再搬運(yùn)回?cái)?shù)據(jù)庫(kù)。

        

            DataSet有三個(gè)特點(diǎn):

             1、獨(dú)立性:獨(dú)立于各數(shù)據(jù)源。即與數(shù)據(jù)庫(kù)不發(fā)生關(guān)系,專(zhuān)注于處理。

              2、離線(xiàn)連接:  一般是離線(xiàn),只是返回?cái)?shù)據(jù)庫(kù)時(shí),才保持連接。

              3、XML描述:   DataSet對(duì)象是用XML格式表示的關(guān)系型數(shù)據(jù)視圖。


              數(shù)據(jù)提供程序

             它提供四個(gè)對(duì)象,保持與不同數(shù)據(jù)庫(kù)連接。

             1、SQLServer.net數(shù)據(jù)提供程序,空間:System.Data.SqlClient, 操作SQl2000或以上版本。

              2、OleDb.net數(shù)據(jù)提供程序,空間:System.Data.OleDb,主要訪(fǎng)問(wèn)Access,F(xiàn)oxPro等

              3、OracleDB.net數(shù)據(jù)提供程序,空間:System.Data.OracleClient,支持Oracle8.1.7以上版本。

              4、ODBC.net數(shù)據(jù)提供程序,空間:System.Data.Odbc



三、ADO.net的五個(gè)核心對(duì)象

       這個(gè)說(shuō)五個(gè)是:

       Connection對(duì)象負(fù)責(zé)連接數(shù)據(jù)庫(kù)

       Command對(duì)象負(fù)責(zé)生成執(zhí)行SQl語(yǔ)句

       DataReader對(duì)象負(fù)責(zé)讀取數(shù)據(jù)庫(kù)的數(shù)據(jù)

        DataAdapter對(duì)象負(fù)責(zé)在Command對(duì)象執(zhí)行完SQL語(yǔ)句后生成并填充DataSet和DataTable。

         DataSet對(duì)象負(fù)責(zé)存取和更新數(shù)據(jù)。

        1、Connection對(duì)象

             表示一個(gè)數(shù)據(jù)源的單個(gè)連接。


           

         例一:連接Access的例子:



        例二:連接Sqlserver的例子:





            2、Command對(duì)象

             它用來(lái)執(zhí)行SQL語(yǔ)句,執(zhí)行的結(jié)果由DataReader和DataAdapter填充到DataSet中,這樣就完成 數(shù)據(jù)庫(kù)數(shù)據(jù)操作的工作 。



            注1:CommandType有三個(gè):

                    Text,說(shuō)明是一個(gè)SQL語(yǔ)句,這是默認(rèn)值,不設(shè)置時(shí)就是它。

                     TableDirect,一個(gè)要操作的數(shù)據(jù)表的名

                     StoredProcedure,一個(gè)存儲(chǔ)過(guò)程。

             注2:構(gòu)造函數(shù)有四個(gè),用第三個(gè)較多。



           2.1、Command的構(gòu)造函數(shù),

            就是上面的四個(gè)方法,這個(gè)是重點(diǎn)。



            2.2、ExecuteReader方法

            通過(guò)DataReader類(lèi)型的對(duì)象,應(yīng)用程序可獲得執(zhí)行SQL命令后的結(jié)果集。

            這個(gè)方法有兩種定義:

            一是ExecuteReader() :不帶參數(shù),直接返回一個(gè)DataReader結(jié)果集;

           二是ExecuteReader(CommandBehavior   behavior):根據(jù)參數(shù)Behavior取值類(lèi)型,決定DataReader類(lèi)型。

                   如果behavior是CommandBehavior.SingleRow,則說(shuō)明返回的ExecuteReader只是結(jié)果集中的第一條數(shù)據(jù);

                   如果behavior是CommandBehavior.SingleResult,則說(shuō)明只返回在查詢(xún)結(jié)果中多個(gè)表里的第一個(gè)。

                   如果behavior是CommandBehavior.SequentialAccess,則說(shuō)明對(duì)于返回的ExecuteReader對(duì)象只能順序

                               讀取它包含的列。一旦讀過(guò)某列,就不能返回再次讀取了,以方便性為代價(jià)換取讀取數(shù)據(jù)時(shí)的高效率。


             無(wú)論何結(jié)果,ExecuteReader方法返回一個(gè)DataReader對(duì)象,該對(duì)象是一個(gè)僅向向的只讀數(shù)據(jù)流,所以主要用來(lái)執(zhí)行

                       基本SQL查詢(xún),要求SQL語(yǔ)句返回記錄集。


             2.2例一:ExecuteReader。

             用executeReader返回一個(gè)DataReader,然后用它來(lái)填充(加載到)另一個(gè)對(duì)象DataTable中,最后DataTable直接綁定到控件上。

  1. Imports System.Data.SqlClient  
  2. Public Class Form1  
  3.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  4.         Dim cn As New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")  
  5.         cn.Open()  
  6.   
  7.         Dim cmd As New SqlCommand("select * from grade", cn)  
  8.         Dim dr As SqlDataReader '不能new.應(yīng)用程序不直接創(chuàng)建 IDataReader 接口的實(shí)例,而是創(chuàng)建繼承 IDataReader 的類(lèi)的實(shí)例  
  9.         dr = cmd.ExecuteReader()  
  10.         Dim dt As New DataTable  
  11.         dt.Load(dr)  
  12.         DataGridView1.DataSource = dt  
  13.   
  14.         cn.Close()  
  15.     End Sub  
  16. End Class  



            2.2例二:利用BindingSource來(lái)綁定

           前面用DataTable綁定數(shù)據(jù),下面用BindingSource來(lái)綁定。界面一樣,代碼變化幾句:

  1. Imports System.Data.SqlClient  
  2. Public Class Form1  
  3.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  4.         Dim cn As New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")  
  5.         cn.Open()  
  6.   
  7.         Dim cmd As New SqlCommand("select * from grade", cn)  
  8.         Dim dr As SqlDataReader '不能new.應(yīng)用程序不直接創(chuàng)建 IDataReader 接口的實(shí)例,而是創(chuàng)建繼承 IDataReader 的類(lèi)的實(shí)例  
  9.         dr = cmd.ExecuteReader()  
  10.         '前面用DataTable綁定數(shù)據(jù),下面用BindingSource來(lái)綁定  
  11.         Dim bs As New BindingSource  
  12.         bs.DataSource = dr  
  13.         DataGridView1.DataSource = bs  
  14.   
  15.         cn.Close()  
  16.     End Sub  
  17. End Class  




              2.3 ExecuteSaclar方法

              Scalar,標(biāo)量,是一個(gè)值。一個(gè)結(jié)果集可能有多個(gè)記錄,每個(gè)記錄可能有多個(gè)列值。因此,

              該方法返回的是首行首列的一個(gè)值,其它值忽略。主要用于那些聚合運(yùn)算,比如求有多少個(gè)記錄,總計(jì)是多少,等等。

  1. Imports System.Data.SqlClient  
  2. Public Class Form1  
  3.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  4.         Dim cn As New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")  
  5.         cn.Open()  
  6.   
  7.         Dim cmd As New SqlCommand("select * from grade", cn)  
  8.         Dim strValue As String = cmd.ExecuteScalar.ToString  
  9.         MessageBox.Show(strValue)  
  10.         cn.Close()  
  11.     End Sub  
  12. End Class  


                2.4 ExecuteNonQuery方法

                即,非查詢(xún)命令。主要用來(lái)執(zhí)行insert,update,delete和那些沒(méi)有返回結(jié)果集的SQL語(yǔ)句,并返回執(zhí)行命令后影響的行數(shù)。

                 如果insert,update對(duì)應(yīng)的記錄不存在,則返回0;如果出錯(cuò),則返回-1.

                 注意:因?yàn)檫@個(gè)用戶(hù)不知道成功與否,所以要加入一些提示或再次顯示原數(shù)據(jù)庫(kù),以便了解執(zhí)行情況。


                 前面幾節(jié)有這個(gè)大量的例子,不再列出。





                   2.5 ADO.net事務(wù)處理。

                   前面說(shuō)了存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程就是一個(gè)批處理。

                   事務(wù)也是一個(gè)批處理過(guò)程,只不過(guò)加強(qiáng)版,即要么全部都成功執(zhí)行,要么全部失敗。(SQL自動(dòng)會(huì)控制它)

                   所以事務(wù)有兩個(gè)作用:

                             一致性:同時(shí)進(jìn)行的查詢(xún)和更新彼此不會(huì)發(fā)生沖突,其它用戶(hù)不會(huì)看到發(fā)生了變化但尚未提交的數(shù)據(jù);

                             可恢復(fù)性:一旦故障或失敗,數(shù)據(jù)庫(kù)會(huì)自動(dòng)地完全恢復(fù)未完成的事務(wù)(Rollback)。


                  ADO.net中,使用Connection和Transaction對(duì)象來(lái)控制事務(wù),事務(wù)順序包括:

                               一、調(diào)用Connecton對(duì)象的BeginTransaction方法來(lái)標(biāo)記事務(wù)的開(kāi)始。

                               二、將Transaction對(duì)象分配給要執(zhí)行的Command的Transaction屬性;

                               三、執(zhí)行所需的命令;

                               四、調(diào)用Transaction對(duì)象的Commit方法來(lái)完成事務(wù),或調(diào)用RollBack方法來(lái)取消事務(wù)。


                   ADO.net事務(wù)處理的優(yōu)點(diǎn):簡(jiǎn)單、運(yùn)行速度快、獨(dú)立于數(shù)據(jù)庫(kù)。

                                                      缺點(diǎn):不能跨多個(gè)數(shù)據(jù)庫(kù)連接。

                                                                  事務(wù)執(zhí)行建立在數(shù)據(jù)庫(kù)的連接層上,所以需要在事務(wù)過(guò)程中一直保持?jǐn)?shù)據(jù)庫(kù)連接。


                    編程流程:

                                   事務(wù)開(kāi)始:Connection對(duì)象的BeginTransaction()聲明開(kāi)始

                                   提交事務(wù):即去執(zhí)行,用Transaction對(duì)象的Commit()方法來(lái)提交  

                                   回滾事務(wù):即事務(wù)失敗后的全部恢復(fù),用Transaction對(duì)象的RollBack()方法來(lái)回滾事務(wù)。

                       

                      2.5例:事務(wù)提交。

                     從 這個(gè)例子中,可以看到事務(wù)是多個(gè)SQL語(yǔ)句提交執(zhí)行(批處理),當(dāng)如果有一條不成功,則全部恢復(fù)(不管以前是否成功)。

  1. Imports System.Data.SqlClient  
  2. Public Class Form1  
  3.     Dim cn As SqlConnection  
  4.     Dim cmd As SqlCommand  
  5.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  6.   
  7.         cn = New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")  
  8.         cn.Open()  
  9.         cmd = New SqlCommand()  
  10.         cmd.Connection = cn  
  11.         Dim trans As SqlTransaction   '這里不能new.   friend成員  
  12.         trans = cn.BeginTransaction '第一步,開(kāi)始事務(wù)。這句必須在下句前,相當(dāng)于實(shí)例事務(wù)對(duì)象  
  13.         cmd.Transaction = trans     'cmd要做的事  
  14.         Try  
  15.             cmd.CommandText = "update grade set 數(shù)學(xué)=33 where 姓名 like '%周%'"  
  16.             cmd.ExecuteNonQuery()  
  17.             cmd.CommandText = "update grade set 英語(yǔ)=11 where 姓名 like '%張%'"  
  18.             cmd.ExecuteNonQuery()  
  19.             trans.Commit()         '第二步,執(zhí)行事務(wù),就是執(zhí)行上面兩個(gè)更新操作  
  20.             Label1.Text = "事務(wù)提交執(zhí)行成功"  
  21.         Catch ex As Exception  
  22.             trans.Rollback()       '第三步,回滾事務(wù),上面若有失敗,則全部恢復(fù)執(zhí)行事務(wù)前的狀態(tài)。  
  23.             Label1.Text = "事務(wù)提交失敗,所有任務(wù)恢復(fù)原狀。"  
  24.         End Try  
  25.     
  26.     End Sub  
  27. End Class  

                    






               3、DataReader對(duì)象

                首先說(shuō)明:DataReader不能實(shí)例化,即不能用New。它只能由Command對(duì)象ExecuteReader()方法來(lái)創(chuàng)建,所以2.2例中沒(méi)用NEw

           

                 DataReader對(duì)象提供向前的、只讀數(shù)據(jù),所以只能依次來(lái)讀:

                             DataReader的Read(),提供下一條記錄的讀取,返回值是布爾值,為真執(zhí)行成功,為假說(shuō)明下一條無(wú)記錄。

                             這些記錄是不能修改的。而DataSet因?yàn)槭请x線(xiàn)數(shù)據(jù)集,在本地內(nèi)存中緩存,所以是可以任意修改的。

 

                  DataReader從數(shù)據(jù)庫(kù)中檢索只讀數(shù)據(jù)流,存儲(chǔ)在客戶(hù)端的網(wǎng)絡(luò)緩存當(dāng)中。在內(nèi)存當(dāng)中只存儲(chǔ)一行,所以開(kāi)銷(xiāo)小,速度快。

                  由于數(shù)據(jù)不在內(nèi)存中緩存,所以在檢索大量數(shù)據(jù)時(shí),DataReader是一種較好的選擇。


                  DataRader還是一個(gè)霸王,具有獨(dú)占性,在已經(jīng)打開(kāi)DataReader的情況下,將不能對(duì)Connection進(jìn)行任何操作,所以用完了它就

                  應(yīng)及時(shí)調(diào)用Close()方法關(guān)閉。

                  通過(guò)Command對(duì)象返回多個(gè)結(jié)果集,并且通過(guò)DataReader對(duì)象NextResult()方法來(lái)使用。


                  再次強(qiáng)調(diào)它不能New,只能由Command對(duì)象的ExecuteReader()方法來(lái)創(chuàng)建 。

 

                  創(chuàng)建后,讀取DataReader對(duì)象中的數(shù)據(jù)有兩種方法:

                             一通過(guò)和DataGridView等數(shù)據(jù)控件綁定,直接輸出;

                             二利用循環(huán)將數(shù)據(jù)取出。(即Read()方法進(jìn)行循環(huán)讀取)。


                  例子:用DataReader對(duì)象通過(guò)循環(huán)讀取多條記錄。

 

  1. Imports System.Data.SqlClient  
  2.   
  3. Public Class Form1  
  4.   
  5.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  6.         Dim cn As New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")  
  7.         cn.Open()  
  8.         Dim cmd As New SqlCommand("select * from grade", cn)  
  9.         Dim dr As SqlDataReader  
  10.         dr = cmd.ExecuteReader()  
  11.         Dim strDisplay As String = ""  
  12.         While dr.Read()  
  13.             strDisplay &= dr("學(xué)號(hào)").ToString + Space(5)  
  14.             strDisplay &= dr("姓名").ToString + Space(5)  
  15.             strDisplay &= dr("英語(yǔ)").ToString + Space(5)  
  16.             strDisplay &= dr("語(yǔ)文").ToString + Space(5)  
  17.             strDisplay &= dr("數(shù)學(xué)").ToString + Space(5)  
  18.             strDisplay &= vbCrLf  
  19.         End While  
  20.         cn.Close()  
  21.         Label1.Text = strDisplay  
  22.     End Sub  
  23. End Class  

                               






               4、DataAdapter

                 DataAdapter數(shù)據(jù)適配器,它就是一個(gè)搬運(yùn)工:從數(shù)據(jù)源搬運(yùn)到本地內(nèi)存中以便來(lái)填充DataSet;或者從本地內(nèi)中數(shù)據(jù)搬運(yùn)回到數(shù)據(jù)源中。

                這兩者的數(shù)據(jù)可以是相同,也可是不同,DataAdapter會(huì)自動(dòng)匹配,發(fā)揮“適配”的作用。


                從數(shù)據(jù)源到本地內(nèi)存,然后再填充就用Fill()方法。

                從本地內(nèi)存到數(shù)據(jù)源,進(jìn)行數(shù)據(jù)庫(kù)的更新用Update()方法。

                                           DataAdapter對(duì)象屬性

屬   性

說(shuō)   明

DeleteCommand

獲取或設(shè)置一個(gè)語(yǔ)句或存儲(chǔ)過(guò)程,以從數(shù)據(jù)集刪除記錄

InsertCommand

獲取或設(shè)置一個(gè)語(yǔ)句或存儲(chǔ)過(guò)程,以在數(shù)據(jù)源中插入新記錄

SelectCommand

獲取或設(shè)置一個(gè)語(yǔ)句或存儲(chǔ)過(guò)程,用于在數(shù)據(jù)源中選擇記錄

UpdateBatchSize

獲取或設(shè)置每次到服務(wù)器的往返過(guò)程中處理的行數(shù)

UpdateCommand

獲取或設(shè)置一個(gè)語(yǔ)句或存儲(chǔ)過(guò)程,用于更新數(shù)據(jù)源中的記錄


                                             DataAdapter方法

方法                         說(shuō)明
Dispose                 刪除該對(duì)象
Fill                            用從源數(shù)據(jù)讀取的數(shù)據(jù)行填充至DataSet對(duì)象中
FillSchema            將一個(gè)DataTable加入到指定的DataSet中,并配置表的模式
GetFillParameters 返回一個(gè)用于SELECT命令的DataParameter對(duì)象組成的數(shù)組

Update                       在DataSet對(duì)象中的數(shù)據(jù)有所改動(dòng)后更新數(shù)據(jù)源。



              


                4.1   DataAdapter對(duì)象的構(gòu)造函數(shù)

              搬運(yùn)工就是雙面間諜,要么向本機(jī)的DataSet填充數(shù)據(jù),要么就向另一個(gè)方向的數(shù)據(jù)庫(kù)更新數(shù)據(jù)。


                                                                     SqlDataAdapter類(lèi)的構(gòu)造函數(shù)

SqlDataAdapter()                                                                                                        不帶參數(shù), 創(chuàng)建SqlDataAdapter對(duì)象
SqlDataAdapter(SqlCommand selectCommand)                                           selectCommand:指定新創(chuàng)建對(duì)象的SelectCommand屬性

                                                                                                                                    用參數(shù)selectCommand設(shè)置其Select Command屬性

SqlDataAdapter(string selectCommandText,SqlConnection selectConnection)          selectCommandText:指定新創(chuàng)建對(duì)象的SelectCommand屬性值;

                                                                                                                                                           selectConnection:指定連接對(duì)象 

                                                                                                                                                           用參數(shù)selectCommandText設(shè)置其Select Command屬性值,

                                                                                                                                                            并設(shè)置其連接對(duì)象是selectConnection
SqlDataAdapter(string selectCommandText,String selectConnectionString)             selectCommandText:指定新創(chuàng)建對(duì)象的SelectCommand屬性值;

                                                                                                                                                       selectConnectionString:指定新創(chuàng)建對(duì)象的連接字符串

                                                                                                                                                       將參數(shù)selectCommandText設(shè)置為Select Command屬性值,

                                                                                                                                                        其連接字符串是selectConnectionString


               構(gòu)造函數(shù)可以不帶參數(shù),或者帶1,2,3個(gè)參數(shù),由參數(shù)可以看到cmd有時(shí)超出自己的范圍,跑到Connection的功能上去了。


          




                 4.2 DataAdapter對(duì)象的Fill()方法

                 這是搬運(yùn)工填充本地內(nèi)存的情況。

                 調(diào)用Fill()方法時(shí),DataAdapter將向數(shù)據(jù)存儲(chǔ)區(qū)傳輸一條Select語(yǔ)句,主要用來(lái)填充或刷新DataSet,返回值是影響DataSet的行數(shù)。

                    

                                                          Fill()方法如下:

int Fill (DataSet dataset)                       dataset:需要更新的DataSet
                                                                  根據(jù)匹配的數(shù)據(jù)源,添加或更新參數(shù)所指定的DataSet,返回值是影響的行數(shù)
int Fill (DataSet dataset, string srcTable)             dataset:需要更新的DataSet;

                                                                                       srcTable:填充DataSet的dataTable名(就是別名,用戶(hù)自己命名一個(gè),可以與原表相同)

                                                                                       根據(jù)dataTable名填充DataSet


                 例子:前面已經(jīng)有了,不再列出,參見(jiàn):http://blog.csdn.net/dzweather/article/details/8564039


            


                  4.3 DataAdapter的Update()方法   

                 這是搬運(yùn)工更新服務(wù)器數(shù)據(jù)庫(kù)的情況。

                調(diào)用Update()方法時(shí),DataAdapter將檢查參數(shù)DataSet每一行的RowState屬性,根據(jù)RowState屬性來(lái)檢查DataSet里

                 的每一行是否改變及改變的類(lèi)型,并依次執(zhí)行所需的Insert,Update,Delete語(yǔ)句,再將改變提交到數(shù)據(jù)庫(kù)中,同時(shí)

                 返回影響的DataSet的行數(shù)據(jù)。


                 例子:下面用一個(gè)添加一行記錄,同時(shí)更新DataSet和數(shù)據(jù)庫(kù)。

                 里面用到了DataRow,這個(gè)用于添加一個(gè)新行NewRow,然后給新行加值.

                 


  1. Imports System.Data.SqlClient  
  2. Public Class Form1  
  3.   
  4.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  5.         Dim cn As New SqlConnection("Data Source=(local);Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")  
  6.         Dim da As New SqlDataAdapter("select * from grade", cn) '搬運(yùn)工拉好水  
  7.         Dim ds As New DataSet()  '本地內(nèi)存準(zhǔn)備好容器來(lái)裝水  
  8.         da.Fill(ds, "mytable")   '裝水  
  9.         Dim drow As DataRow          '定義行變量  
  10.         drow = ds.Tables("mytable").NewRow   '行變量是新的一個(gè)行  
  11.         Try  
  12.             drow("學(xué)號(hào)") = TextBox1.Text     '新行賦值  
  13.             drow("姓名") = TextBox2.Text  
  14.             drow("語(yǔ)文") = TextBox3.Text  
  15.             drow("數(shù)學(xué)") = TextBox4.Text  
  16.             drow("英語(yǔ)") = TextBox5.Text  
  17.             ds.Tables("mytable").Rows.Add(drow)  '新行內(nèi)容加入到表中  
  18.             Dim cmdb As New SqlCommandBuilder(da)  '和數(shù)據(jù)庫(kù)打個(gè)電話(huà),本地內(nèi)存有水要運(yùn)過(guò)去  
  19.             da.Update(ds, "mytable")               '上面電話(huà)里已經(jīng)說(shuō)好了,現(xiàn)在把水運(yùn)到數(shù)據(jù)庫(kù)去  
  20.             DataGridView1.DataSource = ds.Tables("mytable") '綁定到控件上顯示當(dāng)前結(jié)果  
  21.         Catch ex As Exception  
  22.             MessageBox.Show(ex.ToString)  
  23.         End Try  
  24.   
  25.     End Sub  
  26.   
  27.     Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick  
  28.         '點(diǎn)擊控件,其數(shù)據(jù)就顯示在上面的文本框中  
  29.         Dim a As Integer = e.RowIndex  
  30.         TextBox1.Text = DataGridView1.Rows(a).Cells(0).Value.ToString  
  31.         TextBox2.Text = DataGridView1.Rows(a).Cells(1).Value.ToString  
  32.         TextBox3.Text = DataGridView1.Rows(a).Cells(2).Value.ToString  
  33.         TextBox4.Text = DataGridView1.Rows(a).Cells(3).Value.ToString  
  34.         TextBox5.Text = DataGridView1.Rows(a).Cells(4).Value.ToString  
  35.     End Sub  
  36.   
  37.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load  
  38.         'TODO: 這行代碼將數(shù)據(jù)加載到表“SalesDataSet.grade”中。您可以根據(jù)需要移動(dòng)或刪除它。  
  39.         Me.GradeTableAdapter.Fill(Me.SalesDataSet.grade)  
  40.     End Sub  
  41. End Class  

                      



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    国产精品免费视频视频| 日本中文在线不卡视频| 亚洲欧美日韩色图七区| 少妇熟女精品一区二区三区| 欧美亚洲91在线视频| 精品少妇一区二区三区四区| 91播色在线免费播放| 日韩午夜老司机免费视频 | 色婷婷激情五月天丁香| 99视频精品免费视频播放| 99久久精品免费精品国产| 狠狠干狠狠操亚洲综合| 欧美日韩有码一二三区| 久久亚洲精品成人国产| 欧美午夜不卡在线观看| 97人妻精品免费一区二区| 午夜视频免费观看成人| 日韩欧美一区二区不卡看片| 俄罗斯胖女人性生活视频| 亚洲国产精品无遮挡羞羞| 视频一区二区 国产精品| 老司机这里只有精品视频| 国产91人妻精品一区二区三区| 国产av一区二区三区四区五区| 好吊色欧美一区二区三区顽频| 丰满少妇被猛烈插入在线观看| 日韩免费成人福利在线| 国产原创中文av在线播放| 精品一区二区三区人妻视频| 加勒比人妻精品一区二区| 国产av熟女一区二区三区四区| 99久久成人精品国产免费| 激情中文字幕在线观看 | 精品久久综合日本欧美| 免费大片黄在线观看国语| 精品精品国产自在久久高清| 大尺度剧情国产在线视频| 91人妻人澡人人爽人人精品| 激情内射亚洲一区二区三区| 成人三级视频在线观看不卡| 中文字幕高清不卡一区|