版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
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ù)據(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)圖:數(shù)據(jù)庫DacapableCollection數(shù)據(jù)表□btaRgwCo數(shù)據(jù)庫DacapableCollection數(shù)據(jù)表□btaRgwCoIledianDataColumnCollectionConstratntCoHectionDataSetDat自Re他tionCollectionXML2、連接字符串的寫法stringconnectString="DataSource=.;InitialCatalog=Student;IntegratedSecurity=True";3、SqlConnection對象命名空間:System.Data.SqlClient.SqlConnection;返回數(shù)據(jù)庫連接對象,參數(shù)字符串。實例化“連接對象”,并打開連接SqlConnection sqlCnt = newSqlConnection(connectString);sqlCnt.Open();使用完成后,需要關(guān)閉“連接對象”sqlCnt.Close();4、SqlCommand對象命名空間:System.Data.SqlClient.SqlCommand;SqlCommand對象用于執(zhí)行數(shù)據(jù)庫操作,操作方式有三種:SQL語句:command.CommandType=CommandType.Text;存儲過程:command.CommandType=CommandType.StoredProcedure;整張表:command.CommandType=CommandType.TableDirect;實例化一個SqlCommand對象SqlCommandcommand=newSqlCommand();command.Connection=sqlCnt;//綁定SqlConnection對象或直接從SqlConnection創(chuàng)建SqlCommandcommandsqlCnt.CreateCommand();常用方法:?command.ExecuteNonQuery():返回受影響函數(shù),如增、刪、改操作;?command.ExecuteScalar():執(zhí)行查詢,返回首行首列的結(jié)果;?command.ExecuteReader():返回一個數(shù)據(jù)流(SqlDataReader對象)。常用操作執(zhí)行SQLSqlCommandcmd=conn.CreateCommand();//創(chuàng)建SqlCommand對象cmd.CommandType=CommandType.Text;cmd.CommandText="select*fromproducts=@ID";//sql語句cmd.Parameters.Add("@ID",SqlDbType.Int);cmd.Parameters["@ID"].Value〃給參數(shù)sql語句的參數(shù)賦值調(diào)用存儲過程SqlCommandcmd=conn.CreateCommand();cmd.CommandTypeSystem.Data.CommandType.StoredProcedure;cmd.CommandText="存儲過程名";整張表SqlCommandcmd=conn.CreateCommand();cmd.CommandTypeSystem.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ù),當(dāng)布爾值為真時執(zhí)行,為假時跳出。如SqlCommandcommand=newSqlCommand();command.Connection=sqlCnt;command.CommandType=CommandType.Text;command.CommandText="Select*fromUsers";SqlDataReaderreader=command.ExecuteReader(); 〃執(zhí)行SQL,返回一個“流”while(reader.Read()){Console.Write(reader["username"]);//打印出每個用戶的用戶名}6、DataSet對象SqlDataAdapter;
命名空間:System.Data.SqlClient.SqlDataAdapter;SqlDataAdapter是SqlCommand和DataSet之間的橋梁,實例化SqlDataAdapter對象:SqlConnectionsqlCntnewSqlConnectionsqlCntnewSqlConnection(connectString);sqlCnt.Open();//創(chuàng)建SqlCommandSqlCommandmySqlCommand=newSqlCommand();mySqlCommand.CommandTypeCommandType.Text;mySqlCommand.CommandText="select*fromproduct";mySqlCommand.Connection=sqlCnt;//創(chuàng)建SqlDataAdapterSqlDataAdaptermyDataAdapter=newSqlDataAdapter();myDataAdapter.SelectCommand=mySqlCommand;//為SqlDataAdapter對象綁定所要執(zhí)行的SqlCommand對象上述SQL可以簡化為SqlConnection sqlCnt = newSqlConnection(connectString);sqlCnt.Open();//隱藏了SqlCommand對象的定義,同時隱藏了SqlCommand對象與SqlDataAdapter對象的綁定SqlDataAdaptermyDataAdapter=newSqlDataAdapter("select*fromproduct",sqlCnt);屬性和方法?myDataAdapter.SelectCommand 屬性:SqlCommand變量,封裝Select語句;?myDataAdapter.InsertCommand 屬性:SqlCommand變量,封裝Insert語句;?myDataAdapter.UpdateCommand 屬性:SqlCommand變量,封裝Update語句;?myDataAdapter.DeleteCommand 屬性:SqlCommand變量,封裝Delete語句。?myDataAdapter.fill()將執(zhí)行結(jié)果填充到Dataset中,會隱藏打開SqlConnection并執(zhí)行SQL等操作。SqlCommandBuilder;命名空間:System.Data.SqlClient.SqlCommandBuilder。對DataSet的操作(更改、增加、刪除)僅是在本地修改,若要提交到“數(shù)據(jù)庫”中則需要SqlCommandBuilder對象。用于在客戶端編輯完數(shù)據(jù)后,整體一次更新數(shù)據(jù)。具體用法如下:SqlCommandBuildermySqlCommandBuilder=newSqlCommandBuilder(myDataAdapter);//為myDataAdapter賦予SqlCommandBuilder功能myDataAdapter.Update(myDataSet,"表名");II向數(shù)據(jù)庫提交更改后的DataSet,第二個參數(shù)為DataSet中的存儲表名,并非數(shù)據(jù)庫中真實的表名(二者在多數(shù)情況下一致)。DataSet命名空間:System.Data.DataSet。數(shù)據(jù)集,本地微型數(shù)據(jù)庫,可以存儲多張表。使用DataSet第一步就是將SqlDataAdapter返回的數(shù)據(jù)集(表)填充到Dataset對象中:SqlDataAdaptermyDataAdapter=newSqlDataAdapter("select*fromproduct",sqlCnt);DataSetmyDataSet=newDataSet();//創(chuàng)建DataSetmyDataAdapter.Fill(myDataSet,"product");//將返回的數(shù)據(jù)集作為“表”填入DataSet中,表名可以與數(shù)據(jù)庫真實的表名不同,并不影響后續(xù)的增、刪、改等操作訪問DataSet中的數(shù)據(jù)SqlDataAdaptermyDataAdapter=newSqlDataAdapter("select*fromproduct",sqlCnt);DataSetmyDataSet=newDataSet();myDataAdapter.Fill(myDataSet,"product");DataTablemyTable=myDataSet.Tables["product"];foreach(DataRowmyRowinmyTable.Rows){foreach(DataColumnmyColumninmyTable.Columns){Console.WriteLine(myRow[myColumn]);//遍歷表中的每個單元格}}修改DataSet中的數(shù)據(jù)SqlDataAdaptermyDataAdapter=newSqlDataAdapter("select*fromproduct",sqlCnt);DataSetmyDataSet=newDataSet();myDataAdapter.Fill(myDataSet,"product");//修改DataSetDataTablemyTable=myDataSet.Tables["product"];foreach(DataRowmyRowinmyTable.Rows){myRow["name"]=myRow["name"]+"商品";//將DataSet的修改提交至“數(shù)據(jù)庫”SqlCommandBuildermySqlCommandBuilder=newSqlCommandBuilder(myDataAdapter);myDataAdapter.Update(myDataSet,"product");注意:在修改、刪除等操作中表product必須定義主鍵,select的字段中也必須包含主鍵,否則會提示“對于不返回任何鍵列信息的SelectCommand,不支持UpdateCommand的動態(tài)SQL生成。”錯誤增加一行SqlDataAdaptermyDataAdapter=newSqlDataAdapter("select*fromproduct",sqlCnt);DataSetmyDataSet=newDataSet();myDataAdapter.Fill(myDataSet,"product");DataTablemyTable=myDataSet.Tables["product"];//添加一行DataRowmyRow=myTable.NewRow();myRow["name"]="捷安特";myRow["price"]=13.2;//myRow["id"]=100;id若為“自動增長”,此處可以不設(shè)置,即便設(shè)置也無效myTable.Rows.Add(myRow);//將DataSet的修改提交至“數(shù)據(jù)庫”SqlCommandBuildermySqlCommandBuilder=newSqlCommandBuilder(myDataAdapter);myDataAdapter.Update(myDataSet,"product");刪除一行SqlDataAdaptermyDataAdapter=newSqlDataAdapter("select*fromproduct",sqlCnt);DataSetmyDataSet=newDataSet();myDataAdapter.Fill(myDataSet,"product");//刪除第一行DataTablemyTable=myDataSet.Tables["product"];myTable.Rows[0].Delete();SqlCommandBuildermySqlCommandBuilder=newSqlCommandBuilder(myDataAdapter);myDataAdapter.Update(myDataSet,"product");屬性?Tables:獲取包含在DataSet中的表的集合。?Relations:獲取用于將表鏈接起來并允許從父表瀏覽到子表的關(guān)系的集合。?HasEroors:表明是否已經(jīng)初始化DataSet對象的值。方法?Clear清除DataSet對象中所有表的所有數(shù)據(jù)。?Clone復(fù)制DataSet對象的結(jié)構(gòu)到另外一個DataSet對象中,復(fù)制內(nèi)容包括所有的結(jié)構(gòu)、關(guān)系和約束,但不包含任何數(shù)據(jù)。?Copy復(fù)制DataSet對象的數(shù)據(jù)和結(jié)構(gòu)到另外一個DataSet對象中。兩個DataSet對象完全一樣。?CreateDataReader為每個DataTable對象返回帶有—個結(jié)果集的DataTableReader,順序與Tables集合中表的顯示順序相同。?Dispose釋放DataSet對象占用的資源。?Reset將DataSet對象初始化。7、釋放資源資源使用完畢后應(yīng)及時關(guān)閉連接和釋放,具體方法如下:myDataSet.Dispose(); //釋放DataSet對象myDataAdapter.Dispose(); //釋放SqlDataAdapter對象myDataReader.Dispose(); //釋放SqlDataReader對象sqlCnt.Close();//關(guān)閉數(shù)據(jù)庫連接sqlCnt.Dispose();象//釋放數(shù)據(jù)庫連接對學(xué)生戌績管理粟統(tǒng)-MicrosoftVisualStudioForml,cs文件舊精⑥QOS3<>代碼?設(shè)計器助姑鞋方勰器曰CtrkAlt-bLg団認蚩源管理器皿CtrlACtrl+IVIK服爲(wèi)謖源勰啦Ctrli-Alt+S悟SQLServer對蓋蛍源晉理器CtrTTV^trl-hSA凋用層次結(jié)梅CLDCtrl4-Alt-bK令類視胃回Ctrl-l-Shift+匚n代^^裔口?CtrlAD豹對魴覽馳CtrkAlt-b」&普議奏①CtrkX.E輸二團Ctrl-hAlt-hO視圉凹項目曰生成⑥調(diào)試樹gkM 工具(I用F2O:右剎新(E)DelAl>BAAlt+Entererver庫兇…■(5)娠陶Oe<X>0?AnyCPU?R?>w7Xdbagre歹冋十Form1.?時-K匹主趣edf■■衰r血魅號首理實b?鱷■E同義詞■逸師集>4Azurek?KSW'g?21S53P:卜■同沙P遜I*■良桶添加連接?)???刨建新sqAs,測蟲!£)??輸入敢?guī)a(chǎn)的文件名WindowsO?^SQLSe啟
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南省株洲市2026屆高三上學(xué)期教學(xué)質(zhì)量統(tǒng)一檢測(一模)歷史試卷(含答案)
- 河南省駐馬店市泌陽縣2025-2026學(xué)年八年級上學(xué)期1月期末考試物理試卷(含答案)
- 五年級下冊期末測試卷及答案
- 文秘筆試題目及答案
- 北京化工大學(xué)《中國近現(xiàn)代史綱要實務(wù)》2024-2025學(xué)年期末試卷(A卷)
- 湖北省隨州市曾都區(qū)第一高級中學(xué)2025-2026學(xué)年高一上學(xué)期1月期末復(fù)習(xí)綜合測試歷史試題(原卷版+解析版)
- 2025 小學(xué)三年級科學(xué)下冊植物與陽光關(guān)系實驗課件
- 數(shù)控銑床考試題目及答案
- 生產(chǎn)決定消費試題及答案
- 軟考中級科目試題及答案
- 2025至2030中國面食行業(yè)市場深度分析及前景趨勢與投資報告
- 2026年滇池學(xué)院招聘工作人員(97人)備考題庫及答案1套
- (正式版)DB44∕T 2771-2025 《全域土地綜合整治技術(shù)導(dǎo)則》
- 《老年高血壓的用藥指導(dǎo) 》 教學(xué)課件
- 國內(nèi)外無功補償研發(fā)現(xiàn)狀與發(fā)展趨勢
- 不動產(chǎn)買賣合同完整版doc(兩篇)2024
- 風(fēng)光儲多能互補微電網(wǎng)
- 倫理學(xué)全套課件
- 婦科急腹癥的識別與緊急處理
- 貴州醫(yī)科大學(xué)
- 散貨船水尺計量和方法-計算表
評論
0/150
提交評論