




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1、概述2、連接字符串的寫法3、SqlConnection對象4、SqlCommand對象5、SqlDataReader對象6、DataSet對象7、釋放資源1、概述提供了豐富的數(shù)據(jù)庫操作,這些操作可以分為三個步驟:第一,使用SqlConnection對象連接數(shù)據(jù)庫;第二,建立SqlCommand對象,負責(zé)SQL語句的執(zhí)行和存儲過程的調(diào)用;第三,對SQL或存儲過程執(zhí)行后返回的“結(jié)果”進行操作。對返回“結(jié)果”的操作可以分為兩類:一是用SqlDataReader直接一行一行的讀取數(shù)據(jù)集;二是DataSet聯(lián)合SqlDataAdapter來操作數(shù)據(jù)庫。兩者比較:SqlDataReader時刻與遠程數(shù)
2、據(jù)庫服務(wù)器保持連接,將遠程的數(shù)據(jù)通過“流”的形式單向傳輸給客戶端,它是“只讀”的。由于是直接訪問數(shù)據(jù)庫,所以效率較高,但使用起來不方便。DataSet一次性從數(shù)據(jù)源獲取數(shù)據(jù)到本地,并在本地建立一個微型數(shù)據(jù)庫(包含表、行、列、規(guī)則、表之間的關(guān)系等),期間可以斷開與服務(wù)器的連接,使用SqlDataAdapter對象操作“本地微型數(shù)據(jù)庫”,結(jié)束后通過SqlDataAdapter一次性更新到遠程數(shù)據(jù)庫服務(wù)器。這種方式使用起來更方,便簡單。但性能較第一種稍微差一點。(在一般的情況下兩者的性能可以忽略不計。)一張十分出名的ADO.NET結(jié)構(gòu)圖:2、連接字符串的寫法string connectString
3、= Data Source=.;Initial Catalog=Student;Integrated Security=True;3、SqlConnection對象命名空間:System.Data.SqlClient.SqlConnection;返回數(shù)據(jù)庫連接對象,參數(shù)字符串。實例化“連接對象”,并打開連接SqlConnection sqlCnt = new SqlConnection(connectString);sqlCnt.Open();使用完成后,需要關(guān)閉“連接對象”sqlCnt.Close();4、SqlCommand對象命名空間:System.Data.SqlClient.SqlC
4、ommand;SqlCommand對象用于執(zhí)行數(shù)據(jù)庫操作,操作方式有三種:SQL語句:command.CommandType = CommandType.Text;存儲過程:command.CommandType = CommandType.StoredProcedure;整張表:command.CommandType = CommandType.TableDirect;實例化一個SqlCommand對象SqlCommand command = new SqlCommand();command.Connection = sqlCnt; / 綁定SqlConnection對象或直接從SqlCon
5、nection創(chuàng)建SqlCommand command = sqlCnt.CreateCommand(); 常用方法:command.ExecuteNonQuery(): 返回受影響函數(shù),如增、刪、改操作;command.ExecuteScalar():執(zhí)行查詢,返回首行首列的結(jié)果;command.ExecuteReader():返回一個數(shù)據(jù)流(SqlDataReader對象)。常用操作 執(zhí)行SQLSqlCommand cmd = conn.CreateCommand(); /創(chuàng)建SqlCommand對象cmd.CommandType = CommandType.Text;cmd.Comman
6、dText = select * from products = ID; /sql語句cmd.Parameters.Add(ID, SqlDbType.Int);cmd.ParametersID.Value = 1; /給參數(shù)sql語句的參數(shù)賦值 調(diào)用存儲過程SqlCommand cmd = conn.CreateCommand(); cmd.CommandType = System.Data.CommandType.StoredProcedure;cmd.CommandText = 存儲過程名; 整張表SqlCommand cmd = conn.CreateCommand(); cmd.Co
7、mmandType = System.Data.CommandType.TableDirect;cmd.CommandText = 表名5、SqlDataReader對象命名空間:System.Data.SqlClient.SqlDataReader;SqlDataReader對象提供只讀單向數(shù)據(jù)的功能,單向:只能依次讀取下一條數(shù)據(jù);只讀:DataReader中的數(shù)據(jù)是只讀的,不能修改;相對地DataSet中的數(shù)據(jù)可以任意讀取和修改.它有一個很重要的方法,是Read(),返回值是個布爾值,作用是前進到下一條數(shù)據(jù),一條條的返回數(shù)據(jù),當布爾值為真時執(zhí)行,為假時跳出。如SqlCommand comm
8、and = new SqlCommand();command.Connection = sqlCnt;command.CommandType = CommandType.Text;command.CommandText = Select * from Users;SqlDataReader reader = command.ExecuteReader();/執(zhí)行SQL,返回一個“流”while (reader.Read() Console.Write(readerusername);/ 打印出每個用戶的用戶名6、DataSet對象6.1 SqlDataAdapter;命名空間:System.D
9、ata.SqlClient.SqlDataAdapter;SqlDataAdapter是SqlCommand和DataSet之間的橋梁,實例化SqlDataAdapter對象:SqlConnection sqlCnt = new SqlConnection(connectString);sqlCnt.Open();/ 創(chuàng)建SqlCommandSqlCommand mySqlCommand = new SqlCommand();mySqlCommand.CommandType = CommandType.Text;mySqlCommand.CommandText = select * from
10、product;mySqlCommand.Connection = sqlCnt;/ 創(chuàng)建SqlDataAdapterSqlDataAdapter myDataAdapter = new SqlDataAdapter();myDataAdapter.SelectCommand = mySqlCommand;/ 為SqlDataAdapter對象綁定所要執(zhí)行的SqlCommand對象上述SQL可以簡化為SqlConnection sqlCnt = new SqlConnection(connectString);sqlCnt.Open();/ 隱藏了SqlCommand對象的定義,同時隱藏了Sq
11、lCommand對象與SqlDataAdapter對象的綁定SqlDataAdapter myDataAdapter = new SqlDataAdapter(select * from product, sqlCnt);屬性和方法myDataAdapter.SelectCommand屬性:SqlCommand變量,封裝Select語句;myDataAdapter.InsertCommand屬性:SqlCommand變量,封裝Insert語句;myDataAdapter.UpdateCommand屬性:SqlCommand變量,封裝Update語句;myDataAdapter.DeleteCo
12、mmand屬性:SqlCommand變量,封裝Delete語句。myDataAdapter.fill():將執(zhí)行結(jié)果填充到Dataset中,會隱藏打開SqlConnection并執(zhí)行SQL等操作。6.2 SqlCommandBuilder;命名空間:System.Data.SqlClient.SqlCommandBuilder。對DataSet的操作(更改、增加、刪除)僅是在本地修改,若要提交到“數(shù)據(jù)庫”中則需要SqlCommandBuilder對象。用于在客戶端編輯完數(shù)據(jù)后,整體一次更新數(shù)據(jù)。具體用法如下:SqlCommandBuilder mySqlCommandBuilder = new
13、 SqlCommandBuilder(myDataAdapter); / 為myDataAdapter賦予SqlCommandBuilder功能myDataAdapter.Update(myDataSet, 表名); / 向數(shù)據(jù)庫提交更改后的DataSet,第二個參數(shù)為DataSet中的存儲表名,并非數(shù)據(jù)庫中真實的表名(二者在多數(shù)情況下一致)。6.3 DataSet命名空間:System.Data.DataSet。數(shù)據(jù)集,本地微型數(shù)據(jù)庫,可以存儲多張表。使用DataSet第一步就是將SqlDataAdapter返回的數(shù)據(jù)集(表)填充到Dataset對象中:SqlDataAdapter myDa
14、taAdapter = new SqlDataAdapter(select * from product, sqlCnt);DataSet myDataSet = new DataSet();/ 創(chuàng)建DataSetmyDataAdapter.Fill(myDataSet, product);/ 將返回的數(shù)據(jù)集作為“表”填入DataSet中,表名可以與數(shù)據(jù)庫真實的表名不同,并不影響后續(xù)的增、刪、改等操作 訪問DataSet中的數(shù)據(jù)SqlDataAdapter myDataAdapter = new SqlDataAdapter(select * from product, sqlCnt);Dat
15、aSet myDataSet = new DataSet();myDataAdapter.Fill(myDataSet, product);DataTable myTable = myDataSet.Tablesproduct;foreach (DataRow myRow in myTable.Rows) foreach (DataColumn myColumn in myTable.Columns) Console.WriteLine(myRowmyColumn);/遍歷表中的每個單元格 修改DataSet中的數(shù)據(jù)SqlDataAdapter myDataAdapter = new SqlD
16、ataAdapter(select * from product, sqlCnt);DataSet myDataSet = new DataSet();myDataAdapter.Fill(myDataSet, product);/ 修改DataSetDataTable myTable = myDataSet.Tablesproduct;foreach (DataRow myRow in myTable.Rows) myRowname = myRowname + 商品;/ 將DataSet的修改提交至“數(shù)據(jù)庫”SqlCommandBuilder mySqlCommandBuilder = ne
17、w SqlCommandBuilder(myDataAdapter);myDataAdapter.Update(myDataSet, product);注意:在修改、刪除等操作中表product必須定義主鍵,select的字段中也必須包含主鍵,否則會提示“對于不返回任何鍵列信息的 SelectCommand,不支持 UpdateCommand 的動態(tài) SQL 生成?!卞e誤 增加一行SqlDataAdapter myDataAdapter = new SqlDataAdapter(select * from product, sqlCnt);DataSet myDataSet = new Dat
18、aSet();myDataAdapter.Fill(myDataSet, product);DataTable myTable = myDataSet.Tablesproduct;/ 添加一行DataRow myRow = myTable.NewRow();myRowname = 捷安特;myRowprice = 13.2;/myRowid = 100; id若為“自動增長”,此處可以不設(shè)置,即便設(shè)置也無效myTable.Rows.Add(myRow);/ 將DataSet的修改提交至“數(shù)據(jù)庫”SqlCommandBuilder mySqlCommandBuilder = new SqlCom
19、mandBuilder(myDataAdapter);myDataAdapter.Update(myDataSet, product); 刪除一行SqlDataAdapter myDataAdapter = new SqlDataAdapter(select * from product, sqlCnt);DataSet myDataSet = new DataSet();myDataAdapter.Fill(myDataSet, product);/ 刪除第一行DataTable myTable = myDataSet.Tablesproduct;myTable.Rows0.Delete();SqlCommandBuilder mySqlCommandBuilder = new Sql
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司生產(chǎn)流程管理制度
- 光軌道角動量光子晶體光纖的設(shè)計及性能分析
- 2025授權(quán)經(jīng)銷合同范本
- 情感分析與拍賣平臺用戶體驗優(yōu)化-洞察闡釋
- 2024年上海青浦教育系統(tǒng)招聘事業(yè)編制教師真題
- 神經(jīng)內(nèi)科帕金森病基礎(chǔ)知識點歸納
- 2024年安康紫陽縣特崗教師招聘真題
- 2025年四川輕化工大學(xué)數(shù)學(xué)競賽試題
- 幼兒園保育工作相關(guān)表格與工作制度:實驗幼兒園戶外活動檢查記錄表
- 基于類間關(guān)系建模的異常區(qū)域分割算法研究
- AI驅(qū)動的美容護理機器人技術(shù)-洞察闡釋
- 實驗操作考試試題及答案
- 外科創(chuàng)傷處理-包扎技術(shù)課件
- 小三斷絕關(guān)系協(xié)議合同
- 二級注冊計量師考試知識點大全2025
- 助理醫(yī)師考試行為規(guī)范試題及答案
- 健康風(fēng)險的評估與管理策略試題及答案
- 車場日活動方案
- 煉化行業(yè)廢棄物處理技術(shù)-全面剖析
- 煤礦事故、突發(fā)事件信息處理與報告制度
- 中醫(yī)診所管理規(guī)章制度
評論
0/150
提交評論