ADO.NET學習筆記(教程)_第1頁
ADO.NET學習筆記(教程)_第2頁
ADO.NET學習筆記(教程)_第3頁
ADO.NET學習筆記(教程)_第4頁
ADO.NET學習筆記(教程)_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、ADO.NET連接SQLSERVER數(shù)據(jù)庫連接字符串:DataSource=localhost;AttchDBFilename=|DataDirectory|Database1.mdf;InitialCatalog=UserDate;IntegratedSecurity=True參數(shù)說明:DataSource表示數(shù)據(jù)源,其值為服務器地址和實例名,如果是正式版則不用加SQLEXPRESS,如果是免費版,必須加上SQLEXPRESS,即連接本機可以寫成“.SQLEXPRESS”;AttchDBFilename表示附加數(shù)據(jù)庫,其值為附加數(shù)據(jù)庫的地址,DataDirectory代表當前項目目錄下的Ap

2、p_data目錄,是數(shù)據(jù)庫的默認存儲路徑;InitialCatalog為數(shù)據(jù)庫,其值為當前連接所要連接的數(shù)據(jù)庫名稱注:如果要使用Sqlconnection對象,必須導入System.Data.Sqlclient命名空間ADO.NET中的連接等資源都實現(xiàn)了IDisposable接口,可以使用using進行資源管理。也可以使用trycatch語句塊括起來,但是using是最簡單的。代碼語句:using(SqlConnectioncon=newSqlConnection(DataSource=localhost;InitialCatalog=UserDate;IntegratedSecurity=T

3、rue)程序語句塊;或者:SqlConnectioncnn=newSqlConnection();創(chuàng)建SqlConnection對象的一個實例cnn.ConnectionString=DataSource=localhost;InitialCatalog=UserDate;IntegratedSecurity=True;cnn.Open();注:using的作用是及時的釋放資源,在花括號結束的時候,程序會自動釋放語句所申請的內(nèi)存,以達到程序的最優(yōu)。通過SqlCommand對象執(zhí)行SQL語句SqlCommand對象可以執(zhí)行SQL語句完成對數(shù)據(jù)庫的增、刪、改、查等數(shù)據(jù)操作。在SqlCommand類

4、中,最主要的屬性有CommandText,該屬性用于接收要執(zhí)行的SQL語句,例如cmd.CommandText=INSERTINTOb1(name,company,position,shijian)VALUES(Name,Company,Position,Datetime),除了CommandText屬性,主要還有Connection屬性,用來接收數(shù)據(jù)庫連接,還有Transaction屬性,用來接收事物。其還有三個比較常用的方法,第一個是ExecuteNonQuery()方法,主要用來提交無查詢結果的SQL語句,如UPDATE,INSERT,DELETE等語句,其返回值為數(shù)據(jù)庫中被SQL語句影

5、響的行數(shù),第二個是ExecuteReader()方法,主要用來提交SELECT語句,返回值是一個數(shù)據(jù)流,里面是SELECT語句的查詢結果,可以用SqlDataReader對象來接收,然后調用其Read()方法來逐行讀出查詢結果。第三個是ExexuteScalar()方法,主要也是用來提交SELECT語句,但是其返回值是查詢結果的第一行第一列,所以適用于例如COUNT等聚合查詢。SQL注入與參數(shù)化查詢SQL注入是通過特殊的SQL語句非法獲取數(shù)據(jù)庫的內(nèi)容。為了保證系統(tǒng)不被黑客進行SQL注入攻擊,在SqlCommand執(zhí)行SQL語句時,可以對提交的數(shù)據(jù)先進行參數(shù)化處理,參數(shù)化處理主要是通過SqlCo

6、mmand對象的Parameters屬性的Add方法來完成,參數(shù)化處理有兩種方法,第一種既是在“執(zhí)行Insert操作”中提到的,還有另外一種代碼如下:cmd.CommandText=INSERTINTOb1(name,company,position,shijian)VALUES(Name,Company,Position,Datetime);cmd.Parameters.Add(newSqlParameter(Name,Name.Text);cmd.Parameters.Add(newSqlParameter(Company,Company.Text);cmd.Parameters.Add(

7、newSqlParameter(Position,Position.Text);cmd.Parameters.Add(newSqlParameter(Datetime,DateTime.Parse(Datetime.Text);cmd.ExecuteNonQuery();注:以上的代碼中需要注意一點,在第一種代碼中,顯示的對各個參數(shù)的數(shù)據(jù)進行了定義,但是在上面這種代碼中,并未對參數(shù)進行數(shù)據(jù)定義,所以需要在提供數(shù)據(jù)時對數(shù)據(jù)進行適時的轉換,例如“shijian”在數(shù)據(jù)庫中定義為DateTime類型,但是其在文本框中獲得的為string類型,所以需要調用DateTime的Parse方法對數(shù)據(jù)進行轉換

8、,如果數(shù)據(jù)庫中的數(shù)據(jù)是int型,在賦值時也應進行相應的轉換。執(zhí)行Insert操作首先,需要申明一個SqlCommand對象;其次,用SqlConnection的CreateCommand()函數(shù),創(chuàng)建一個SqlCommand對象,然后將所要執(zhí)行的SQL語句賦值給SqlCommand的CommandText屬性;最后,調用SqlCommand類的ExexuteNonQuery()方法,執(zhí)行CommandText的SQL語句。代碼語句:using(SqlCommandcmd=con.CreateComand()cmd.CommandText=“INSERTINTOb1(name,company,p

9、osition)VALUES(“whh”,“UVGE”,“coder”)”;cmm.ExecuteNonQuery();或者:using(SqlCommandcmd=con.CreateComand()設置SQL語句cmm.CommandText=INSERTINTOb1(name,company,position,shijian)VALUES(Name,Company,Position,Datetime);/創(chuàng)建參數(shù),并定義其數(shù)據(jù)類型,要和數(shù)據(jù)庫中對應的字段保持相同cmm.Parameters.Add(Name,SqlDbType.NVarChar);cmm.Parameters.Add(C

10、ompany,SqlDbType.NVarChar);cmm.Parameters.Add(Position,SqlDbType.NVarChar);cmm.Parameters.Add(Datetime,SqlDbType.DateTime);/設置參數(shù)的值,這些值來自前段的輸入信息cmm.ParametersName.Value=Name.Text;cmm.ParametersCompany.Value=Company.Text;cmm.ParametersPosition.Value=Position.Text;cmm.ParametersDatetime.Value=Datetime.

11、Text;執(zhí)行SQL語句cmm.ExecuteNonQuery();注:SqlCommand類的ExecuteNonQuery()方法的返回值是當前執(zhí)行的SQL語句影響的行數(shù)執(zhí)行select語句首先,申明SqlCommand對象其次,用SqlConnection的CreateCommand()函數(shù),創(chuàng)建一個SqlCommand對象,然后將所要執(zhí)行的SQL語句賦值給SqlCommand的CommandText屬性;第三,調用SqlCommand類的ExecuteReader()方法,執(zhí)行CommandText的SQL語句。第四,申明SqlDataReader對象,并用其承接ExecuteRead

12、er()方法所返回的數(shù)據(jù)流;第五,用SqlDataReader類的Read()方法逐行讀取數(shù)據(jù)流中的逐句,取出其中所需要字段的數(shù)據(jù)進行處理代碼語句:using(SqlCommandcmd=con.CreateComand()Cmd.CommandText=SELECT語句;using(SqlDataReaderreader=cmd.ExecuteReader()While(reader.Read()Stringname=reader.GetString(reader.GetOrdinal(“name”);/數(shù)據(jù)處理語句塊;或者:using(SqlCommandcmd=con.CreateCom

13、and()using(SqlDataReaderreader=cmd.ExecuteReader()While(reader.Read()Stringname=reader.“name”.ToString();/數(shù)據(jù)處理語句塊;注:1、User是SQLSERVER的關鍵字,在表名中應盡量避免,如果必須是User表,可以用SELECT*FROMUser這樣的語句來查詢該表的內(nèi)容2、SqlCommand類的ExecuteScalar()方法返回的是查詢結果的第一行第一列的數(shù)據(jù)3、在插入數(shù)據(jù)的同時想要獲得當前插入數(shù)據(jù)的id(主鍵)號,可以通過output語法和ExecuteScalar方法實現(xiàn),這是

14、在SQLSERVER2005以后的版本中都有的,具體語法如下:cmd.CommandText=“INSERTINTOT_Users(UserName,PassWord)OUTPUTinserted.IdValues(“admin”,“123456”)”;intid=Convert.ToInt32(cmd.ExecuteScalar();using和closeusing對實現(xiàn)了IDisposable接口的類進行了資源管理,只要在其作用域內(nèi)using就會自動進行資源管理,當程序執(zhí)行出了其作用范圍,程序會自動close和dispose資源,保證資源的及時釋放和回收。而Close只是關閉了當前的連接或

15、者資源,只要其后沒有dispose,還可以繼續(xù)open連接,即close并未釋放資源,只做了關閉處理,當close和dispose連用時,和using作用相同,但考慮到異常處理等情況,所以最好使用using,少用close和dispose。通過數(shù)據(jù)集操作數(shù)據(jù)數(shù)據(jù)集是最常用的訪問數(shù)據(jù)的方式,其主要流程是連接數(shù)據(jù)庫、進行數(shù)據(jù)查詢、將查詢結果填充到數(shù)據(jù)集、對數(shù)據(jù)集中的數(shù)據(jù)進行展示和操作、將操作后的數(shù)據(jù)集提交數(shù)據(jù)庫,通過這一系列操作實現(xiàn)對數(shù)據(jù)庫的修改,此過程主要通過DataSet、DataAdapter、DataTable、DataRow、DataColumn、SqlCommandBuilder等類實

16、現(xiàn)。根據(jù)上面所說到過程,逐步分析:1、數(shù)據(jù)查詢,這里的數(shù)據(jù)查詢不再是通過Command對象實現(xiàn),而是通過DataAdapter類的實例來實現(xiàn),具體代碼如下:SqlDataAdaptersqldadp=newSqlDataAdapter(SELECTname,company,position,shijianFROMUserDate.dbo.b1WHEREshijian2010-01-21,con)上面的代碼里面的con是SqlConnection對象的實例,即數(shù)據(jù)庫鏈接2、將數(shù)據(jù)填充到數(shù)據(jù)集,數(shù)據(jù)集也就是DataSet對象的實例了,代碼如下:DataSetorder_daset=newDataS

17、et();創(chuàng)建DataSet對象實例sqldadp.Fill(order_daset);填充DataSet對象注意填充語句中的參數(shù)以及方法,是用SqlDataAdapter對象的實例來填充DataSet對象的實例3、對數(shù)據(jù)集中的數(shù)據(jù)進行展示和操作,這步也是這項技術中最重要、最麻煩的一步,主要是通過DataTable對象的實例對數(shù)據(jù)進行展示和修改,而DataTable類具有很多的屬性和方法,常用的屬性有:Columns能夠得到數(shù)據(jù)集中的字段的數(shù)據(jù)類型、大小、字段名等信息,DataSet能夠獲得當前DataTable實例所屬的數(shù)據(jù)集,Rows可以通過下標及字段名(類似于二維數(shù)組)的方式獲得指定行列

18、的數(shù)據(jù),常用的方法有:NewRow()方法能夠創(chuàng)建一個空白行,可以在添加數(shù)據(jù)的時候使用,AcceptChanges()方法能夠將數(shù)據(jù)表中修改提交給數(shù)據(jù)庫,Clear()方法可以清楚DataTable對象中的所有數(shù)據(jù)。具體代碼如下:DataTabledt=newDataTable();創(chuàng)建數(shù)據(jù)表對象dt=order_daset.Tables0;填充數(shù)據(jù)表Response.Write(vtableborder=Tvtrxth姓名v/thvth公司v/thxth職位v/thxth入職時間);for(inti=0;idt.Rows.Count;i+)/按照字段,逐行取出數(shù)據(jù)表中的內(nèi)容并顯示在頁面上Re

19、sponse.Write();Response.Write(+dt.Rowsiname.ToString()+);Response.Write(+dt.Rowsicompany.ToString()+);Response.Write(+dt.Rowsiposition.ToString()+);Response.Write(+DateTime.Parse(dt.Rowsishijian.ToString().ToString(yyyy-MM-dd)+);Response.Write();Response.Write();注:上面的代碼主要是數(shù)據(jù)集的展示功能,需要注意的是填充數(shù)據(jù)表的語句,是由D

20、ataSet對象的Tables屬性的下標為0的數(shù)據(jù)表填充的,這點是非常重要的。下面來看看對數(shù)據(jù)集的修改并且提交數(shù)據(jù)庫,對數(shù)據(jù)集的修改,可以通過DataRow以及SqlCommandBuilder對象的實例來實現(xiàn),SqlCommandBuilder的作用是根據(jù)DataAdapter對象自動生成INSERT、UPDATE、DELETE語句,從而使DataAdapter對象更新數(shù)據(jù)庫內(nèi)容。具體代碼如下:/創(chuàng)建DataAdapter對象實例SqlDataAdaptersqldadp=newSqlDataAdapter(SELECTname,company,position,shijianFROMUse

21、rDate.dbo.b1,con);SqlCommandBuilderscb=newSqlCommandBuilder(sqldadp);/生成插入、刪除、更新語句DataSetds=newDataSet();/創(chuàng)建DataSet對象sqldadp.Fill(ds);/填充DataSetDataRowMyrow=ds.Tables0.NewRow();在數(shù)據(jù)表中創(chuàng)建新的空白記錄對象/從前臺頁面接受要插入的數(shù)據(jù)Myrowname=Name.Text;Myrowcompany=Company.Text;Myrowposition=Position.Text;Myrowshijian=Datetim

22、e.Text;將接收到的數(shù)據(jù)添加到DataTable中ds.Tables0.Rows.Add(Myrow);/更新數(shù)據(jù)庫中的內(nèi)容sqldadp.Update(ds);Response.Write(添加成功!vbr);注:上面的代碼中最關鍵的一個方法是SqlDataAdapter對象的Update。方法,這個方法的作用是將對數(shù)據(jù)集所作的改變提交給數(shù)據(jù)庫,這部分代碼與上面的展示代碼所不同的是DataRow對象的實例所接收的是DataTable中的一行,而不是整個DataTable,其代碼為:DataRowMyrow=ds.Tables0.NewRow(),這句話就是說在原有的DataTable的基

23、礎上創(chuàng)建一個新的空行,而下面的代碼則是為這個空行賦值并提交更新,同樣的,如果是更新數(shù)據(jù)的話,也是獲得DataTable的某一行后,然后對其中的數(shù)據(jù)進行賦值修改,然后提交,如果是刪除操作,則是通過DataTable獲取某行后,用DataRow接受,然后再調用DataTable的Rows屬性的Remove方法刪除,具體如下代碼:DataTabledt=ds.Tables0;dt.Rows.Remove(Myrow);網(wǎng)絡數(shù)據(jù)的事務處理事務處理是為了防止在網(wǎng)絡上多用戶對數(shù)據(jù)庫的并發(fā)操作破壞數(shù)據(jù)的一致性和完整性,而事務處理主要通過SqlTransaction對象完成,其主要的方法有:Commit()方

24、法主要負責提交事務處理完成真正的數(shù)據(jù)庫查詢更新操作,Rollback()方法主要負責當數(shù)據(jù)查詢更新等數(shù)據(jù)庫操作出現(xiàn)異常時的事務回滾。ADO.NET的事務處理主要通過SqlCommand對象來實現(xiàn)事務對象,代碼如下:using(SqlConnectioncon=newSqlConnection(DataSource=localhost;InitialCatalog=UserDate;IntegratedSecurity=True)SqlTransactiontransql=null;申明SqlTransaction對象的實例SqlCommandcmd=newSqlCommand();trycon.Open();創(chuàng)建數(shù)據(jù)庫鏈接transql=con.BeginTransaction();開始事務處理cmd.Connection=con;/設置Command對象的鏈接cmd.Transaction=transql;/設置Command對象的事務設置帶參數(shù)的SQL語句cmd.CommandText=INSERTINTOb1(n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論