編程語(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直接綁定到控件上。
- Imports System.Data.SqlClient
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim cn As New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")
- cn.Open()
-
- Dim cmd As New SqlCommand("select * from grade", cn)
- Dim dr As SqlDataReader '不能new.應(yīng)用程序不直接創(chuàng)建 IDataReader 接口的實(shí)例,而是創(chuàng)建繼承 IDataReader 的類(lèi)的實(shí)例
- dr = cmd.ExecuteReader()
- Dim dt As New DataTable
- dt.Load(dr)
- DataGridView1.DataSource = dt
-
- cn.Close()
- End Sub
- End Class
2.2例二:利用BindingSource來(lái)綁定
前面用DataTable綁定數(shù)據(jù),下面用BindingSource來(lái)綁定。界面一樣,代碼變化幾句:
- Imports System.Data.SqlClient
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim cn As New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")
- cn.Open()
-
- Dim cmd As New SqlCommand("select * from grade", cn)
- Dim dr As SqlDataReader '不能new.應(yīng)用程序不直接創(chuàng)建 IDataReader 接口的實(shí)例,而是創(chuàng)建繼承 IDataReader 的類(lèi)的實(shí)例
- dr = cmd.ExecuteReader()
- '前面用DataTable綁定數(shù)據(jù),下面用BindingSource來(lái)綁定
- Dim bs As New BindingSource
- bs.DataSource = dr
- DataGridView1.DataSource = bs
-
- cn.Close()
- End Sub
- End Class
2.3 ExecuteSaclar方法
Scalar,標(biāo)量,是一個(gè)值。一個(gè)結(jié)果集可能有多個(gè)記錄,每個(gè)記錄可能有多個(gè)列值。因此,
該方法返回的是首行首列的一個(gè)值,其它值忽略。主要用于那些聚合運(yùn)算,比如求有多少個(gè)記錄,總計(jì)是多少,等等。
- Imports System.Data.SqlClient
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim cn As New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")
- cn.Open()
-
- Dim cmd As New SqlCommand("select * from grade", cn)
- Dim strValue As String = cmd.ExecuteScalar.ToString
- MessageBox.Show(strValue)
- cn.Close()
- End Sub
- 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ù)(不管以前是否成功)。
- Imports System.Data.SqlClient
- Public Class Form1
- Dim cn As SqlConnection
- Dim cmd As SqlCommand
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
-
- cn = New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")
- cn.Open()
- cmd = New SqlCommand()
- cmd.Connection = cn
- Dim trans As SqlTransaction '這里不能new. friend成員
- trans = cn.BeginTransaction '第一步,開(kāi)始事務(wù)。這句必須在下句前,相當(dāng)于實(shí)例事務(wù)對(duì)象
- cmd.Transaction = trans 'cmd要做的事
- Try
- cmd.CommandText = "update grade set 數(shù)學(xué)=33 where 姓名 like '%周%'"
- cmd.ExecuteNonQuery()
- cmd.CommandText = "update grade set 英語(yǔ)=11 where 姓名 like '%張%'"
- cmd.ExecuteNonQuery()
- trans.Commit() '第二步,執(zhí)行事務(wù),就是執(zhí)行上面兩個(gè)更新操作
- Label1.Text = "事務(wù)提交執(zhí)行成功"
- Catch ex As Exception
- trans.Rollback() '第三步,回滾事務(wù),上面若有失敗,則全部恢復(fù)執(zhí)行事務(wù)前的狀態(tài)。
- Label1.Text = "事務(wù)提交失敗,所有任務(wù)恢復(fù)原狀。"
- End Try
-
- End Sub
- 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)讀取多條記錄。
- Imports System.Data.SqlClient
-
- Public Class Form1
-
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim cn As New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")
- cn.Open()
- Dim cmd As New SqlCommand("select * from grade", cn)
- Dim dr As SqlDataReader
- dr = cmd.ExecuteReader()
- Dim strDisplay As String = ""
- While dr.Read()
- strDisplay &= dr("學(xué)號(hào)").ToString + Space(5)
- strDisplay &= dr("姓名").ToString + Space(5)
- strDisplay &= dr("英語(yǔ)").ToString + Space(5)
- strDisplay &= dr("語(yǔ)文").ToString + Space(5)
- strDisplay &= dr("數(shù)學(xué)").ToString + Space(5)
- strDisplay &= vbCrLf
- End While
- cn.Close()
- Label1.Text = strDisplay
- End Sub
- 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,然后給新行加值.
- Imports System.Data.SqlClient
- Public Class Form1
-
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim cn As New SqlConnection("Data Source=(local);Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")
- Dim da As New SqlDataAdapter("select * from grade", cn) '搬運(yùn)工拉好水
- Dim ds As New DataSet() '本地內(nèi)存準(zhǔn)備好容器來(lái)裝水
- da.Fill(ds, "mytable") '裝水
- Dim drow As DataRow '定義行變量
- drow = ds.Tables("mytable").NewRow '行變量是新的一個(gè)行
- Try
- drow("學(xué)號(hào)") = TextBox1.Text '新行賦值
- drow("姓名") = TextBox2.Text
- drow("語(yǔ)文") = TextBox3.Text
- drow("數(shù)學(xué)") = TextBox4.Text
- drow("英語(yǔ)") = TextBox5.Text
- ds.Tables("mytable").Rows.Add(drow) '新行內(nèi)容加入到表中
- Dim cmdb As New SqlCommandBuilder(da) '和數(shù)據(jù)庫(kù)打個(gè)電話(huà),本地內(nèi)存有水要運(yùn)過(guò)去
- da.Update(ds, "mytable") '上面電話(huà)里已經(jīng)說(shuō)好了,現(xiàn)在把水運(yùn)到數(shù)據(jù)庫(kù)去
- DataGridView1.DataSource = ds.Tables("mytable") '綁定到控件上顯示當(dāng)前結(jié)果
- Catch ex As Exception
- MessageBox.Show(ex.ToString)
- End Try
-
- End Sub
-
- Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
- '點(diǎn)擊控件,其數(shù)據(jù)就顯示在上面的文本框中
- Dim a As Integer = e.RowIndex
- TextBox1.Text = DataGridView1.Rows(a).Cells(0).Value.ToString
- TextBox2.Text = DataGridView1.Rows(a).Cells(1).Value.ToString
- TextBox3.Text = DataGridView1.Rows(a).Cells(2).Value.ToString
- TextBox4.Text = DataGridView1.Rows(a).Cells(3).Value.ToString
- TextBox5.Text = DataGridView1.Rows(a).Cells(4).Value.ToString
- End Sub
-
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- 'TODO: 這行代碼將數(shù)據(jù)加載到表“SalesDataSet.grade”中。您可以根據(jù)需要移動(dòng)或刪除它。
- Me.GradeTableAdapter.Fill(Me.SalesDataSet.grade)
- End Sub
- End Class
|