版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第七章 數據庫訪問技術ADO.NET數據綁定數據控件17.1 ADO.NETADO.NET概念 ADO.NET是重要的應用程序級接口,用于在.NET平臺上提供數據訪問服務。在ADO.NET中,可以使用新的.NET Framework數據提供程序來訪問數據源。ADO.NET是專為基于消息的Web應用程序而設計的,同時還能夠為其他應用程序結構提供較好的功能 ADO.NET的設計專門優(yōu)化了使用SqlClient訪問數據的過程,并使用ADO.NET對象實現其數據處理。其對象模式與ADO類似,由Connection(提供與數據源的連接)對象和Command對象(執(zhí)行數據庫命令以返回修改數據,運行存儲過程
2、等)組成 。 ADO.NET 是一組向 .NET 程序員公開數據訪問服務的類。 ADO.NET 通過數據處理將數據訪問分解為多個可以單獨使用或一前一后使用的不連續(xù)組件 ;ADO.NET的兩個核心組件:DataSet和.NET Framework數據提供程序(Connection Command DataReader DataAdapter) DataSet是ADO.NET結構的核心組件 ADO.NET設計思想是從數據庫中讀取數據到內存中,構成內存中的一個數據庫27.1 ADO.NETADO.NET與ADO ADO.NET將焦點集中在脫機的數據上,也就是說當ADO.NET從數據庫中獲取部分的數據
3、集后便切斷與數據庫系統(tǒng)之間的連接,使它變成脫機狀態(tài) 常駐內存數據表示形式不同;ADO使用Recordset對象,該對象類似一個單獨的表;ADO.NET使用DataSet對象,該對象包含由DataTable對象表示的一個或者多個表 ADO.NET不再支持Server端的Cursor,純粹是存儲在內存中,所以執(zhí)行效率上有所提高;同時,DataSet對象以XML的格式顯示,所以能夠在多個程序之間流通,達到數據共享的目的 為了訪問各種不同的數據庫系統(tǒng)或者不同的數據集,ADO.NET提供了若干個命名空間供ASP.NET使用;編程時只需要在程序代碼中把這些命名空間導入,以聲明正確的數據類型,而并非像ASP
4、頁面那樣是通過Server對象的CreatObject()方法創(chuàng)建37.1 ADO.NETSystem.Data命名空間ADO.NET技術核心,它提供ADO.NET編程模型內的數據訪問的基本功能。DataSet位于該命名空間中,它包括其他類如:DataTable、DataRow和DataView等。System.Data命名空間中還包括一個重要的枚舉類型SqlDbType,它的成員表示了SQL Server內部的數據類型System.Data.Common命名空間該命名空間包含由.NET Framework數據提供程序共享的類。數據提供程序描述一個類的集合,這些類用于在托管空間中訪問數據源???/p>
5、通過繼承,也通過.NET數據訪問提供程序來實現共享。DataAdapter是一個抽象類,用于連接DataSet對象和數據源System.Data.OleDbSystem.Data.OleDb是第一個被加入到.NET Framework中的為數據訪問提供程序的命名空間,它通過OLE DB提供程序。OleDbDataAdapter、OleDbCommand、OleDbDataReader和OleDbConnection提供了使用眾多支持OLE DB數據源必需的所有功能47.1 ADO.NETSystem.Data.SqlClient命名空間SqlClient提供程序是完全為訪問SQL Server
6、數據庫而設計的。 SQLDbDataAdapter、SQLDbCommand、SQLDbDataReader、SQLDbConnection和DataSet類能夠對SQL Server數據庫執(zhí)行任何操作System.Data.SqlTypes命名空間該命名空間中主要包含映射到SQL Server數據庫內部數據類型的結構System.Data.Odbc 命名空間用于 ODBC 的.NET Framework 數據提供程序描述用來訪問托管空間中的 ODBC 數據源的類集合。System.Data.OracleClient命名空間用于 Oracle 的 .NET Framework 數據提供程序描述
7、了用于在托管空間中訪問 Oracle 數據源的類集合。57.1 ADO.NETADO.NET結構 67.1 ADO.NETADO.NET的對象對象屬性Connection對象用于連接到數據庫或其它數據源Command對象用于在數據庫中檢索、編輯、刪除、或插入數據DataReader對象從數據源中讀取只進且只讀的數據流DataAdapter對象用于將數據源中的數據填充到DataSet中,并將在DataSet中數據的變化返回到數據庫中。可以將數據適配器看作是DataSet與數據庫之間的橋梁。DataSet數據集,相當于駐留在內存中的數據庫77.1 ADO.NETSQL數據庫字段類型char(siz
8、e)用于保存定長(size)字節(jié)的字符串數據。每行定長(不足部分補為空格);最大長度為255字節(jié),缺省值為每行1字節(jié)varchar(size)用于保存變長的字符串數據。其中最大字節(jié)長度由(size)指定。 每行長度可變,最大長度為255字節(jié)。數據長度缺省為1nchar(size)多字節(jié)字符串。 每行定長(不足部分補為空格)。 長度(size)是指字符的個數。nvarchar(size)可變長,多字節(jié)字符串。 每行變長。長度(size)是指字符的個數。binary(size)固定長度的二進制字符串。 每行定長(不足部分補為空格);最大長度為255字節(jié),缺省值為每行1字節(jié)。varbinary(si
9、ze)可變長度的長度的二進制字符串。 每行長度可變,最大長度為255字節(jié)。數據長度缺省為1timestamp用于改變管理的二進制值。 字節(jié)數為16datetime保存定長的日期時間數據,范圍為1753年1月1日到公元9999年12月21日,精度為3微秒間隔。 每行固定為8字節(jié)長度。smalldatetime保存定長的日期時間數據,范圍為1990年1月1日到公元2079年6月6日,精度為分鐘間隔。 每行固定為4字節(jié)長度。int保存整型數據,范圍為-2147483647到+2147483647。 最大長度為4字節(jié)32 - 1字節(jié)或4G。87.1 ADO.NETSQL數據庫字段類型9SQL數據庫字段
10、類型(1)二進制數據類型二進制數據包括 Binary、Varbinary 和 ImageBinary 數據類型既可以是固定長度的(Binary),也可以是變長度的。Binary(n) 是 n 位固定的二進制數據。其中,n 的取值范圍是從 1 到 8000。其存儲的大小是 n + 4 個字節(jié)。Varbinary(n) 是 n 位變長度的二進制數據。其中,n 的取值范圍是從 1 到 8000。其存儲的大小是 n + 4個字節(jié),不是n 個字節(jié)。在 Image 數據類型中存儲的數據是以位字符串存儲的,不是由 SQL Server 解釋的,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、G
11、IF 和 JPEG 格式把數據存儲在 Image 數據類型中。 如果要存儲的各種二進制數據的大小比較一致,那么建議使用Binary(n)數據類型。如果將要存儲的二進制數據之間的大小差別比較大,那么應該使用Varbinary(n)數據類型。如果將要存儲的二進制數據大于8000字節(jié),那么必須使用Varbinary(MAX)數據類型(2)字符數據類型字符數據的類型包括 Char,Varchar 和 Text字符數據是由任何字母、符號和數字任意組合而成的數據。 Varchar 是變長字符數據,其長度不超過 8KB。Char 是定長字符數據,其長度最多為 8KB。超過 8KB 的ASCII 數據可以使用
12、 Text數據類型存儲。例如,因為 Html 文檔全部都是 ASCII 字符,并且在一般情況下長度超過 8KB,所以這些文檔可以 Text 數據類型存儲在SQL Server 中。10(3)Unicode 數據類型Unicode 數據類型包括 Nchar,Nvarchar 和Ntext使用這種字符類型存儲的列可以存儲多個字符集中的字符。當列的長度變化時,應該使用 Nvarchar 字符類型,這時最多可以存儲 4000 個字符。當列的長度固定不變時,應該使用 Nchar 字符類型,同樣,這時最多可以存儲 4000 個字符。當使用 Ntext 數據類型時,該列可以存儲多于 4000 個字符。 va
13、rchar在SQL Server中是采用單字節(jié)來存儲數據的,nvarchar是使用Unico來存儲數據的中文字符存儲到SQL Server中會保存為兩個字節(jié)(一般采用Unico編碼),英文字符保存到數據庫中,如果字段的類型為varchar,則只會占用一個字節(jié),而如果字段的類型為nvarchar,則會占用兩個字節(jié)兩字段分別有字段值:“我和coffee”。那么varchar字段占22+6=10個字節(jié)的存儲空間,而nvarchar字段占82=16個字節(jié)的存儲空間。如字段值只是英文可選擇varchar,而字段值存在較多的雙字節(jié)(中文、韓文等)字符時用nvarchar。 (4)日期和時間數據類型日期和時
14、間數據類型包括 Datetime 和 Smalldatetime兩種類型日期和時間數據類型由有效的日期和時間組成。 例如,有效的日期和時間數據包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個數據類型是日期在前,時間在后;后一個數據類型是時間在前,日期在后。在 Microsoft SQL Server中,日期和時間數據類型包括 Datetime 和 Smalldatetime 兩種類型時,所存儲的日期范圍是從 1753 年 1 月 1 日開始,到9999 年12 月 31 日結束(每一個值要求 8 個存儲字節(jié))。使用 Smal
15、ldatetime 數據類型時,所存儲的日期范圍是 1900年 1 月 1日 開 始,到 2079 年 12 月 31 日結束(每一個值要求 4 個存儲字節(jié))。日期的格式可以設定。設置日期格式的命令如下:Set DateFormat format | format _var|其中,format | format_var 是日期的順序。有效的參數包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默認情況下,日期格式為MDY。11(5)數字數據類型數字數據只包含數字。數字數據類型包括正數和負數、小數(浮點數)和整數整數由正整數和負整數組成,例如 39、25、0-2和33967。在SQL
16、Server 中,整數存儲的數據類型是Int,Smallint和Tinyint。Int數據類型存儲數據的范圍大于 Smallint 數據類型存儲數據的范圍,而Smallint 據類型存儲數據的范圍大于Tinyint 數據類型存儲數據的范圍。使用 Int 存儲數據的范圍是從 -2 147 483 648 到 2 147 483 647(每一個值要求4個字節(jié)存儲空間)。使用Smallint數據類型時,存儲數據的范圍從 -32 768 到 32 767(每一個值要求2個字節(jié)存儲空間)。使用Tinyint 數據類型時,存儲數據的范圍是從0 到255(每一個值要求1個字節(jié)存儲空間)。精確小數數據在 SQ
17、L Server 中的數據類型是 Decimal 和 Numeric。這種數據所占的存儲空間根據該數據的位數來確定。在SQL Server 中,小數數據的數據類型是 Float 和 Real。例如,三分之一這個分數記作0.3333333,當使用近似數據類型時能準確表示。因此,從系統(tǒng)中檢索到的數據可能與存儲在該列中數據不完全一樣。(6)貨幣數據表示正的或者負的貨幣數量 在 SQL Server 中,貨幣數據的數據類型是Money 和 SmallmoneyMoney數據類型要求 8 個存儲字節(jié),Smallmoney 數據類型要求 4 個存儲字節(jié)。(7)特殊數據類型特殊數據類型包括前面沒有提過的數據
18、類型。特殊的數據類型有3種,即 Timestamp、Bit 和 Uniqueidentifier。Timestamp 用于表示SQL Server 活動的先后順序,以二進投影的格式表示。Timestamp 數據與插入數據的日期和時間沒有關系。Bit 由 1 或者 0 組成。當表示真或者假、ON 或者 OFF 時,使用 Bit 數據類型。 Uniqueidentifier 由 16 字節(jié)的十六進制數字組成,表示一個全局唯一的。當表的記錄行要求唯一時,GUID是非常有用。例如,在客戶標識號列使用這種數據類型可以區(qū)別不同的客戶。127.1 ADO.NETADO.NET支持的數據源 ADO.NET 1
19、.0版本主要提供兩種數據提供程序,分別是SQL Server.NET和OLE DB.NET數據提供程序。而ADO.NET1.1提供4種數據提供程序,除了1.0提供的兩種之外,還包括OracleDB.NET數據提供程序和ODBC.NET數據提供程序。 數據提供程序訪問對象SQL Server.NET數據提供程序的SqlConnection連接對象主要訪問SQL Server2000及以上版本命名空間System.Data.SqlClient.SqlConnectionOLEDB.NET數據提供程序的OleDbConnection連接對象主要訪問SQL Server 7.0及以下和其他數據庫命名空
20、間System.Data.OleDb.OleDbConectionOracleDB.NET數據提供程序的OracleConnection連接對象主要訪問Oracle 8i、Oracle 9i及以上的版本命名空間System.Data.OracleClient.OracleConectionODBC.NET數據提供程序的OdbcConnection連接對象主要訪問ODBC數據源命名空間System.Data.Odbc.OdbcConection137.1 ADO.NETConnection對象 Connection類主要處理對數據庫的連接和管理數據庫事務,它是操作數據庫的基礎。該類表示應用程序和
21、數據源之間唯一的會話。ConnectionString屬性 :獲取或設置用戶打開數據庫的連接字符串AttachDB 關鍵字:主數據庫文件的名稱,包括可連接數據庫的完整路徑名。該路經可以是絕對路徑,也可以是相對路徑,這取決于是否使用 DataDirectory 替換字符串。如果使用 DataDirectory,則對應的數據庫文件必須存在于替換字符串指向的目錄的子目錄中。遠程服務器、HTTP 及 UNC 路徑名不受支持。必須按照如下方式使用關鍵字“database”(或其別名之一)指定數據庫名稱:Connection Timeout 關鍵字:獲取在嘗試建立連接時終止嘗試并生成錯誤之前所等待的時間(
22、以秒為單位),默認值為15秒。值為0表示沒有對等待時間進行設置,而不是表示沒有等待時間。Data Source 或Server關鍵字:要連接的 SQL Server 實例的名稱或網絡地址或其他數據源服務器名或文件名??梢栽诜掌髅Q之后指定端口號: 指定本地實例時,始終使用 (local)。Initial Catalog 或Database關鍵字:當前數據庫或連接打開后要使用的數據庫的名稱。Integrated Security 或Trusted_Connection關鍵字:當為 false 時,將在連接中指定用戶 ID 和密碼。當為 true 時,將使用當前的 Windows 帳戶憑據進行身
23、份驗證??勺R別的值為 true、false、yes、no 以及與 true 等效的 sspi(強烈推薦)。 默認為false。 AttachDbdataYourDB.mdf;integrated security=true;database=YourDatabase server=tcp:servername, portnumber 147.1 ADO.NETPassword 或Pwd關鍵字:SQL Server 帳戶登錄的密碼。建議不要使用。為保持高安全級別,我們強烈建議您使用 Integrated Security 關鍵字。User ID 或Uid關鍵字:SQL Server 登錄帳戶。建
24、議不要使用。為保持高安全級別,我們強烈建議您使用 Integrated Security 關鍵字。State屬性:連接的當前狀態(tài)。默認為ClosedBroken:與數據源的連接中斷。只有在連接打開之后才可能發(fā)生這種情況??梢躁P閉處于這種狀態(tài)的連接,然后重新打開。Closed:連接處于關閉狀態(tài)。 Connecting:連接對象正在與數據源連接。Executing :連接對象正在執(zhí)行命令。Fetching :連接對象正在檢索數據。Open:連接處于打開狀態(tài)。 ServerVersion 屬性:獲取包含客戶端所連接到的服務器的版本的字符串。 157.1 ADO.NETOLEDbConnection
25、使用ADO.NET連接到OLEDB數據源(Access、Excel)上時,需要使用OLEDbConnection對象。建立一個Connection對象:Provider:數據源的程序提供者。例如:Access的提供者是Microsoft.Jet.OLE DB.4.0?!纠咳缫粋€連接Access數據庫的連接語句代碼如下:OLEDbConnection還有open和close這兩個常用方法,分別表示數據庫的打開和關閉。以下是一個如何創(chuàng)建和打開與OLE DB數據源的連接: OleDbconnection myconn=new Oledbconnection(“Provider=Microsoft.
26、Jet.OLE DB.4.0;DataSource=c:database1.mdb”); Myconn.open(); /打開數據庫 Myconn.close(); /關閉數據庫OleDbConnection myconnection=new OleDbConnection(ConnectionString) string ConnectionString=“rovider=Microsoft.Jet.OLEDB.4.0;DataSource=c:Database1.mdb”167.1 ADO.NETSqlConnection SQL Server.NET數據提供程序使用SqlConnecti
27、on對象提供了與Microsoft SQL Server版本7.0或更高版本的連接。例:8.1建立一個SqlConnection連接Conn.open(); /打開數據庫 Conn.close(); /關閉數據庫 Conn.ChangeDatabase(); /打開的SqlConnection更改當前數據庫OdbcConnection ODBC.NET數據提供程序使用OdbcConnection對象提供了與ODBC數據源的連接。Driver屬性:獲取為當前連接指定的 ODBC 驅動程序名稱。它通常是 DLL 名稱(例如 Sqlsrv32.dll)。在打開連接前,默認值一直為空字符串 ()。 O
28、racleConnection Oracle.NET數據提供程序使用OracleConnection對象提供了與Oracle數據庫的連接和操作。SqlConnection conn=new SqlConnection(“DataSource=localhost; Integrated Security=SSPI;Initial Catalog=EXF_DB”);17ASP.NET數據庫連接字符串總結一、使用OleDbConnection對象連接OLE DB數據源1連接Access 數據庫Access 2000: Access 2003: Access 2007:備注:Access數據庫只提供兩
29、個連接屬性provider(數據提供程序)和data source(數據源);Access20002003的文件格式是”.mdb”,,Access2007的文件格式是”.accdb”;Access的數據提供程序版本是向下兼容的,在Win7下測試使用Microsoft.Jet.OLEDB.3.5提示未在本地計算機上注冊“Microsoft.Jet.OLEDB.3.5”提供程序。改用Microsoft.Jet.OLEDB.4.0或者Microsoft.Ace.OLEDB12.0完全可以訪問Access2000的數據庫文件。當然也可以嘗試使用微軟提供的MDAC來修改provider的版本2連接Exc
30、el數據庫Excel 2003:Excel 2007:備注:在代碼中引用工作表時,應將表名表示為”工作表名$”,遇到字段為數據庫保留關鍵字時,給該字段名加上以示區(qū)別,如定義select 語句時:string connStr=“select * from login$ where username=abc and password=abc123 “;如果在數據表中用數字作為文本類型數據時,則應在數字前加單引號將默認的數值強行設定為文本類型?!皃rovider=Microsoft.Jet.Oledb.3.5;Data Source=Access文件路徑”“provider=Microsoft.Je
31、t.Oledb.4.0;Data Source=Access文件路徑”“provider=Microsoft.Ace.Oledb.12.0;Data Source=Access文件路徑”“provider=Microsoft.Jet.OLEDB.4.0;Data Source=Access文件路徑;extended properties=excel 8.0”“provider=Microsoft.Ace.OLEDB.12.0;Data Source=Access文件路徑;extended properties=excel 12.0”18ASP.NET數據庫連接字符串總結二、使用SqlConne
32、ction對象連接SQL Server數據庫設置數據庫文件路徑的方法:1使用絕對路徑:2使用服務器相對路徑:3使用最簡單的相對路徑:“|DataDirectory|”代表ASP.NET項目里自動創(chuàng)建的App_Data文件夾1以SQL Server驗證模式連接SQLServer(1)以數據庫名連接方式(2)以數據庫文件完整路徑連接方式示例:Server=.SQLEXPRESS; Database=DatabaseName; User ID =sa; Password=abc123” Server=.SQLEXPRESS; Initial Catalog =DatabaseName; Uid =s
33、a; Pwd=abc123” Server=(local)SQLEXPRESS; AttachDb:Solution1WebApp_Datadata.mdf;User ID =sa; Password=abc123” 備注:密碼可以為空。“AttachDb:Solution1WebApp_Datadata.mdf”“AttachDb= + System.Web.HttpContext.Current.Server.MapPath(App_DataDatabase.mdf)“AttachDb=|DataDirectory|data.mdf”Server=服務器名; Database=數據庫名稱;
34、 User ID=用戶名; Password=密碼 或者(使用縮寫與別名)Server=服務器名; Initial Catalog=數據庫名稱; Uid=用戶; Pwd=密碼“Serve=服務器名;AttachDb數據庫文件路徑;User ID=用戶名;Password=密碼”19ASP.NET數據庫連接字符串總結2以Windows 驗證模式連接SQL Server(1)以數據庫名連接方式(2)以數據庫文件完整路徑連接方式示例:Server=服務器名; Database=數據庫名稱; Integrated Security=SSPI Server=(local)SQLEXPRESS; Atta
35、chDb:Solution1WebApp_Datadata.mdf; Integrated Security=true” 備注:SSPI即為true三、使用OdbcConnection對象連接ODBC數據源示例:首先要在計算機管理數據源配置好相對應的數據源(選擇數據庫類型,設置數據庫文件路徑與相對應的數據庫名)Driver= Microsoft.Jet.OLEDB.4.0; Server=.SQLEXPRESS; Database=DatabaseName; Trusted_Connection=yes四、使用OracleConnection對象連接Oracle數據庫“Server=服務器名;
36、 Database=數據庫名稱; Integrated Security=SSPI” “Serve=服務器名;AttachDb數據庫文件路徑; Integrated Security=true”“Driver=數據庫提供程序名;Server=服務器名; Database=數據庫名;Trusted_Connection=yes”“Data Source=Oracle8i; Integrated Security=yes”20ASP.NET數據庫連接字符串總結五、在ASP.NET項目中的web.config文件里配置數據庫連接并在程序代碼中獲取連接字符串1在 標簽里添加連接或者在程序代碼中獲取 標
37、簽里的連接字符串:引用命名空間:2在標簽里添加連接或者在程序代碼中獲取 標簽里的連接字符串:引用命名空間: Using System.Configuration ;string connStr = ConfigurationManager.ConnectionStringsConnectionName.ToString(); Using System.Configuration ; string connStr = ConfigurationManager.AppSettingsConnectionName.ToString(); 217.1 ADO.NETConnection事件 具有兩個事
38、件,它們可用于從數據源中檢索信息性消息或確定Connection的狀態(tài)是否已被改變InfoMessage:當從數據中返回信息性消息(指數據庫中不會引發(fā)異常的消息)時發(fā)生。 注意:1.InfoMessage事件從數據庫中檢索警告和信息性消息,異常信息不在檢索范圍內 2.對于SQL Server任何嚴重度等于小于10的消息都被視為信息性消息 3.InfoMessage事件接收SqlInfoMessageEventArgs對象,該對象在其Error屬性中包含來自數據庫消息的集合,用戶可查詢Error對象,以獲取錯誤號和消息文本以及錯誤來源 StateChange:當Connection狀態(tài)出現更改時
39、發(fā)生 注意:1.只要Connection對象的狀態(tài)發(fā)生變化,StateChange事件就會被激活 2.OriginalState指示Connection在更改前的狀態(tài);CurrentStae指示Connection更改后的狀態(tài)227.1 ADO.NETCommand對象 對數據庫的操作有查詢、插入、刪除和更新等,這些操作都是ASP.NET開發(fā)中經常用到的。在創(chuàng)建了一個Connection對象后,就需要創(chuàng)建Command對象實現對數據庫的操作。SqlCommand常用屬性CommandText用于設置SqlCommand執(zhí)行的SQL語句,可以是任何合法的SQL語句(包括INSERT、UPDATE
40、、SELECT等)。除了可以執(zhí)行SQL語句外,當CommandType設置為存儲過程時,CommandText的值就是存儲過程的名稱。CommandTimeout在命令開始檢索結果前的等待時間,而非命令執(zhí)行所需要的時間。CommandType獲取或設置Command對象要執(zhí)行命令的類型(如SQL命令、存儲過程、數據表)Connection獲取或設置SqlCommand的實例使用的SqlConnection對象名稱Parameters在執(zhí)行SQL語句中需要的參數設置237.1 ADO.NET成員名說明Text默認值,用于執(zhí)行SQL語句,Command對象可以把該文本的值傳遞給數據庫不需要任何處理
41、StoredProcedure存儲過程,用于調用并執(zhí)行存儲過程命令,存儲過程是把多個命令集中起來一次提交給數據庫,從而來提高數據庫的執(zhí)行效率。TableDirect它從數據庫返回一個完整的表,等價于“Select *Form TableName”來調用Text類型的Command命令,該類型命令只有OLE DB托管提供程序 CommandType取值范圍和意義247.1 ADO.NETSqlCommand常用方法 Cancel試圖取消SqlCommand的執(zhí)行CreatParameter創(chuàng)建SqlParameter對象的新實例Dispose釋放由Component占用的資源ExecuteNon
42、Query該方法主要執(zhí)行UPDATE、INSERT或DELETE這樣的SQL語句,對于UPDATE、INSERT和DELETE語句,對數據庫中的數據進行修改,返回值為該命令所影響的行數。對于SELECT語句,返回值為-1。如果發(fā)生回滾,返回值也為-1。ExecuteReader將CommandText發(fā)送到Connection并生成一個SqlDataReaderExecuteScalar該方法主要返回結果集中第一行的第一列,由于它只能返回一個值,通??梢岳盟鼇慝@取聚合值。例如:購物中共消費的金額,共購買的商品總數,購買者的平均年齡等。 ExcuteXmlReader將CommandText發(fā)
43、送到Connection并生成一個XmlReader對象。ResetCommandTimeout將CommandTimeout屬性重置為默認值257.1 ADO.NETSqlCommand常見構造函數和方法(例8.3) SqlCommand構造函數是初始化SqlCommand對象命令,它有4種方法重載。也就是有4種方法可以定義Command對象。 第一種:new SqlCommand()初始化CommandText的值和初始化Connection的值都為空 第二種 :new SqlCommand(string)用string字符串的內容初始化CommandText的值,而Connection的
44、屬性值為空。 第三種:new SqlCommand(string cmd,SqlConnection conn)用cmd初始化CommandText的值,用conn初始化Connection的屬性值。 第四種:new SqlCommand(string cmd,SqlConnection conn,Transaction)用cmd初始化CommandText的值,用conn初始化Connection的屬性值,用Transaction初始化Transaction的屬性值。267.1 ADO.NET 比較如下的三種代碼,可以看出它們執(zhí)行的功能都是相同的。String mycmd=”SELECT*
45、FROM goods”;String myconn=”integrated security=SSPI;datasource=(local);initialcatalog=SPXS”;/方法一:SqlCommand sqlcmd=new SqlCommand()SqlConnection sqlconn=new SqlConnection(myconn);Sqlcmd.CommandText=mycmd;sqlcmd.Connection=sqlconn;/方法二:SqlCommand sqlcmd=new SqlCommand(mycmd);SqlConnection sqlconn=new
46、 SqlConnection(myconn);Sqlcmd.Connection=sqlconn;/方法三:SqlCommand sqlcmd=new SqlCommand(mycmd,new SqlConnection(myconn);/方法四:SqlCommand sqlcmd=new SqlCommand(mycmd,new SqlConnection(myconn),new SqlTransaction transaction);277.1 ADO.NET結構化查詢語句SQL1、SELECT語法 SELECTDISTINCT別名.字段名或表達式AS 列標題 FROM table_sou
47、rceWHERE search_conditionGROUP BY group_by_expressionORDER BY order_expressionASC/DESC2、INSERT INTO語法INSERT INTO 表名(字段列表)VALUES(字段值列表)3、DELETE語法DELETE FROM 表名WHERE刪除條件 4、UPDATE語法UPDATE 表名 SET 字段名1=新字段值,字段名1=新字段值WHERE 更新條件 287.1 ADO.NETSQL存儲過程定義存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,是利用SQL Server所提
48、供的Transact-SQL語言所編寫的程序。功能是將常用或復雜的工作,預先用SQL語句寫好并用一個指定名稱存儲起來, 以后需要數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優(yōu)化后存儲在數據庫服務器中,可由應用程序通過一個調用來執(zhí)行,而且允許用戶聲明變量 。同時,存儲過程可以接收和輸出參數、返回執(zhí)行存儲過程的狀態(tài)值,也可以嵌套調用。特點1.存儲過程只在創(chuàng)造時進行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數據庫執(zhí)行速度。2.當對數據
49、庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。 3.存儲過程可以重復使用,可減少數據庫開發(fā)人員的工作量 4.安全性高,可設定只有某些用戶才具有對指定存儲過程的使用權297.1 ADO.NET類型 1.系統(tǒng)存儲過程:以sp_開頭,用來進行系統(tǒng)的各項設定.取得信息.相關管理工作。存儲在master 2.本地存儲過程:用戶創(chuàng)建的存儲過程是由用戶創(chuàng)建并完成某一特定功能的存儲過程,事實上一般所說的存儲過程就是指本地存儲過程。存儲在用戶定義的數據庫中 3.臨時存儲過程:一是本地臨時存儲過程,以井
50、字號(#)作為其名稱的第一個字符,則該存儲過程將成為一個存放在tempdb數據庫中的本地臨時存儲過程,且只有創(chuàng)建它的用戶才能執(zhí)行它; 二是全局臨時存儲過程,以兩個井字號(#)號開始,則該存儲過程將成為一個存儲在tempdb數據庫中的全局臨時存儲過程,全局臨時存儲過程一旦創(chuàng)建,以后連接到服務器的任意用戶都可以執(zhí)行它,而且不需要特定的權限。 4.遠程存儲過程:在SQL Server2005中,遠程存儲過程(Remote Stored Procedures)是位于遠程服務器上的存儲過程,通??梢允褂梅植际讲樵兒虴XECUTE命令執(zhí)行一個遠程存儲過程。 5.擴展存儲過程:擴展存儲過程(Extended
51、 Stored Procedures)是用戶可以使用外部程序語言編寫的存儲過程,而且擴展存儲過程的名稱通常以xp_開頭。存儲在master307.1 ADO.NET語法格式 1、創(chuàng)建存儲過程:CREATE PROCEDURE 所有者存儲過程名( IN | OUT | INOUT 參數名 數據類型VARYING=內定值 參數) AS SQL語句RETURN/IN 輸入參數表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值;/OUT 輸出參數該值可在存儲過程內部被改變,并可返回;/INOUT 輸入輸出參數調用時指定,并且可被改變和返回;/每個參數名前要有一個“”
52、符號;/每一個存儲過程的參數僅為該程序內部使用,參數的類型除了IMAGE外,其他SQL erver所支持的數據類型都可使用。 317.1 ADO.NET 2、執(zhí)行存儲過程: 3、修改存儲過程 4、刪除存儲過程EXEC 存儲過程名ALTER PROC 存儲過程名( 參數1 參數n)AS SQL語句RETURNDROP PROCEDURE 存儲過程名327.1 ADO.NETDataReader對象 數據庫中的數據。一種是使用DataReader逐行地從數據源獲得數據放進緩沖區(qū)并進行處理;二是使用DataSet對象來將數據放到內存中進行處理 數據讀取器DataReader對象是一個簡單的數據集,用
53、于從數據源中檢索只讀、只進的數據流。注意:1.要創(chuàng)建DataReader對象,必須調用對象Command的ExecuteReader()方法2.DataReader只能讀取數據,沒有提供創(chuàng)建、修改和刪除數據庫記錄的功能3.DataReader是一種只進的讀取數據方式,不能回頭讀取上一條記錄4.DataReader不能在IIS的內容中保持數據,而是把數據傳遞到顯示位置5.當使用Command對象的ExecuteReader方法時,返回的就是DataReader類型,查詢結果在查詢執(zhí)行時返回,并存儲在客戶端的網絡緩沖區(qū)中,直到使用DataReader的Read方法對它們發(fā)出請求。這種方法一次只在內
54、存中存儲一行,從而降低了系統(tǒng)開銷。6. DataReader和數據源類型緊密連接,所以它對應也有兩種類型OleDbDataReader類和SqlDataReader類。 337.1 ADO.NETSqlDataReader主要屬性和方法 347.1 ADO.NETSqlDataReader的應用(例8.4) 定義一個SqlDataReader對象Protected System.Data.Sqlclient.SqlDataReader sqlDataReader1 創(chuàng)建SqlCommand對象實例后,可以調用Command.ExecuteReader方法從數據源中檢索行,然后把值賦給sqlDa
55、taReader1。sqlDataReader1=sqlCommand1.ExecuteReader(); 隨后調用sqlDataReader1的Read方法從查詢的結果中獲取行。Read方法返回一個布爾值,可以通過這個值判斷是否是結果集的最后一條記錄。通常需要while語句來循環(huán)讀取?;灸J绞牵?While (sqlDataReader1.Read() . 357.1 ADO.NETDataAdapter 對象 DataAdapter對象可以用于檢索和更新數據庫,或從數據源中獲取數據,填充DataSet對象中的表,以及對DataSet對象進行更改,提交回數據源,該對象是DataSet對象和
56、實際數據源之間的橋梁 DataAdapter對象是可配置的,允許用戶指定將哪些數據移入或移除數據集,經常采取的形式是對SQL語句或存儲過程進行調用,這些語句或存儲過程被調用時即可實現對數據庫的讀寫DataAdapter和DataReader的區(qū)別 DataReader對象是通過打開一個連接來檢索數據庫的信息,然后執(zhí)行SQL命令,再搜索要檢索的記錄,當不再有操作時關閉連接 DataAdapter對象僅僅在需要填充DataSet對象時才使用數據庫連接,在完成操作后將釋放所有服務器資源DataAdapter對象的工作步驟一般有兩種: 通過Command對象執(zhí)行SQL語句從數據源中檢索數據,將獲取的結
57、果填充的DataSet對象的表中 把用戶對DataSet對象做出的更改寫到數據源中367.1 ADO.NETSqlDataAdapter 屬性和方法(例8.5) InertCommand獲取或設置一個SQL語句或存儲過程,以便在數據源中插入新記錄SelectCommand獲取或設置一個SQL語句或存儲過程,用于在數據源中選擇記錄UpdateCommand獲取或設置一個SQL語句或存儲過程,用于在數據源中更新新記錄DleteCommand獲取或設置一個SQL語句或存儲過程,以便在數據源中刪除記錄Fill在DataSet中添加或刷新行以匹配數據源中的行Update為DataSet中每個已插入、已更
58、新或已刪除的行調用相應的Inset、Update或Delete語句377.1 ADO.NETSqlDataAdapter填充DataSet的過程(Fill) 通過DataAdapter的SelectCommand屬性從數據庫中檢索出需要的數據。(SelectCommand其實是一個Command對象。) 通過DataAdapter的Fill方法把檢索來的數據填充 DataSet。 SqlConnection sqlConnection1 = new SqlConnection ( Data Source=localhost ;Integrated Security=SSPI ;Initial
59、Catalog=Northwind ) ;/創(chuàng)建數據連接SqlCommand selectCMD = new SqlCommand ( SELECT CustomerID , CompanyName FROM Customers , sqlConnection1 ) ;/創(chuàng)建并初始化SqlCommand對象SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter ( ) ;custDA.SelectCommand = selectCMD ;sqlConnection.Open ( ) ;/創(chuàng)建SqlDataAdapter對象,并根據SelectCo
60、mmand屬性檢索數據DataSet dsDataSet1 = new DataSet ( ) ;sqlDataAdapter1.Fill ( dsDataSet1 , Customers ) ;/使用SqlDataAdapter的Fill方法填充DataSetsqlConnection.Close ( ) ;/關閉數據連接387.1 ADO.NETFill方法的多種重載Fill(Data Table) 填充一個表,參數為被填充表的名稱Fill(DataSet)填充一個DataSet對象,參數為被填充對象的名稱Fill(DataSet,string)填充 一個DataSet對象,參數用于映射的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工勞動合同協(xié)議書格式
- 廠房租賃合同范本版(18篇)
- 農業(yè)機械購買補貼合同
- 技術開發(fā)服務合同案例
- 企業(yè)培訓就業(yè)協(xié)議書編寫技巧
- 2第二章-血液一般檢驗-02-血栓與止血、血型
- 室內清潔合作合同格式
- 員工個人合同書范本
- 投資合作協(xié)議范本:2024投資合作協(xié)議范本
- 場地游戲安全協(xié)議書
- 人工智能時代高等院校教師信息素養(yǎng)提升研究
- 商家聯盟合作方案
- 廣東省廣州市2021年中考英語真題(含答案)
- 《應用統(tǒng)計學》(第4版)-自測試卷及答案A卷
- 公司法課件(新員工)
- GB/T 10082-2024軌道車重型軌道車
- 山東省青島市2023-2024學年七年級上學期期末考試數學試題(含答案)
- 考古與人類學習通超星期末考試答案章節(jié)答案2024年
- 2024年上海市標準房屋租賃合同經典版(三篇)
- 新目標藝術培訓中心商業(yè)策劃書(3篇)
- 小學生防火安全教育課件
評論
0/150
提交評論