九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
ADO.NET入門教程(二)了解.NET數(shù)據(jù)提供程序

摘要

      在上一篇文章《你必須知道的ADO.NET(一) 初識ADO.NET》中,我們知道ADO.NET的兩大核心組件分別是Data Provider和DataSet。如果說DataSet是ADO.NET的心臟,那么Data Provider絕對是ADO.NET的左臂右膀。Data Provider提供了訪問外部數(shù)據(jù)數(shù)據(jù)源的可能性,而且外部的數(shù)據(jù)源是多樣的。本文將詳細說明.NET數(shù)據(jù)提供程序的作用以及如何訪問不同的數(shù)據(jù)源。


 

目錄


 

1. 什么是.NET數(shù)據(jù)提供程序?

      .NET Framework數(shù)據(jù)提供程序用于連接數(shù)據(jù)庫、執(zhí)行命令和檢索結(jié)果。這些結(jié)果將被直接處理,放置在 DataSet 中以便根據(jù)需要向用戶公開、與多個源中的數(shù)據(jù)組合,或在層之間進行遠程處理。.NET Framework 數(shù)據(jù)提供程序是輕量的,它在數(shù)據(jù)源和代碼之間創(chuàng)建最小的分層,并在不降低功能性的情況下提高性能。

      下表列出了 .NET Framework 中所包含的數(shù)據(jù)提供程序。

.NET數(shù)據(jù)提供程序

說明

用于 SQL Server 的數(shù)據(jù)提供程序

提供對 Microsoft SQL Server 7.0 或更高版本中數(shù)據(jù)的訪問。使用 System.Data.SqlClient 命名空間。

用于 OLE DB 的數(shù)據(jù)提供程序

提供對使用 OLE DB 公開的數(shù)據(jù)源中數(shù)據(jù)的訪問。使用 System.Data.OleDb 命名空間。

用于 ODBC 的數(shù)據(jù)提供程序

提供對使用 ODBC 公開的數(shù)據(jù)源中數(shù)據(jù)的訪問。使用 System.Data.Odbc 命名空間。

用于 Oracle 的數(shù)據(jù)提供程序

適用于 Oracle 數(shù)據(jù)源。用于 Oracle 的 .NET Framework 數(shù)據(jù)提供程序支持 Oracle 客戶端軟件 8.1.7 和更高版本,并使用 System.Data.OracleClient 命名空間。

EntityClient 提供程序

提供對實體數(shù)據(jù)模型 (EDM) 應(yīng)用程序的數(shù)據(jù)訪問。使用 System.Data.EntityClient 命名空間。

 

2. .NET數(shù)據(jù)提供程序的核心對象

      在上一篇文章中,我們知道Connection對象、Command對象、DataReader對象以及DataAdapter對象構(gòu)成了.NET數(shù)據(jù)提供程序的骨架。這四個對象非常重要,在后續(xù)的文章中,我將詳細的講解。如果需要了解這些對象的作用,可以參考上一篇文章《你必須知道的ADO.NET(一) 初識ADO.NET》。

 

3. 其他重要的對象

      如果說上述四大對象構(gòu)成了.NET數(shù)據(jù)提供程序的骨架,那么下面我要說的這些對象可以說是.NET數(shù)據(jù)提供程序的血肉了。這些對象雖然沒有四大核心對象那么的光鮮耀眼,但卻也是“八仙過海,各顯神通”。

3.1 Parameter對象

      說對Parameter對象,也許大部分人會說:“哦,原來是它啊”。盡管大部分人已經(jīng)很熟悉了,我還是要在這里嘮叨幾句。我需要強調(diào)是,這一系列的文章主要寫給對ADO.NET還不熟悉,或者剛?cè)腴T的讀者,旨在講解ADO.NET最最基礎(chǔ)卻又非常重要的內(nèi)容。

      簡單的講,Parameter對象定義了命令和存儲過程的輸入、輸出和返回值參數(shù)。哦!看起來,好像并不是那么強大,那么Parameter對象到底有什么本領(lǐng)呢?

先看這樣一段代碼,也許很多人曾經(jīng)都寫過,包括我自己:

strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"

只要懂一點SQL語法的童鞋都知道,這不就是一個簡單的登陸查詢驗證代碼嗎?好,先別急,你知道的,說不定別人還不知道。

試想一下,如果用戶(一般是那些技術(shù)高超,自稱為“黑客”的高級用戶)填入

userName = "' OR '1'='1";

passWord = "' OR '1'='1";

接下來,將見證奇跡的時刻:該用戶竟然成功登陸網(wǎng)站了。哇!看起來這一切似乎多么的魔幻和神奇,其實我們稍作分析發(fā)現(xiàn)這也不過是一些雕蟲小計。

我們將userName和passWord變量帶入strSQL變量后,將得到這樣的一條SQL語句:

strSQL = "SELECT * FROM users WHERE (name = '' OR '1'='1') and (pw = '' OR '1'='1');"

也就是實際上運行的SQL命令會變成下面這樣的

strSQL = "SELECT * FROM users;"

到這一步,我想也不需要我多說了吧,你懂的!上面的情況,用專業(yè)術(shù)語來說就是一個簡單的SQL注入(SQL injection)。記得上政治課的時候,我印象最深的一句話是,“萬物都是矛盾統(tǒng)一的”。這句話經(jīng)典而又真實,以至于時刻在我的腦海里浮現(xiàn)。有SQL注入的出現(xiàn),因此就有參數(shù)化查詢(Parameterized Query )的出現(xiàn)。

      參數(shù)化查詢是指在設(shè)計與數(shù)據(jù)庫連結(jié)并存取資料時,在需要填入數(shù)值或資料的地方,使用參數(shù) (Parameter) 來給值,這個方法目前已被視為最有效可預(yù)防SQL注入(SQL Injection) 的攻擊手法的防御方式。在使用參數(shù)化查詢的情況下,數(shù)據(jù)庫服務(wù)器不會將參數(shù)的內(nèi)容視為SQL指令的一部份來處理,而是在數(shù)據(jù)庫完成 SQL 指令的編譯后,才套用參數(shù)執(zhí)行,因此就算參數(shù)中含有具破壞性的指令,也不會被數(shù)據(jù)庫所執(zhí)行。說了這么多,無非是想說明Parameter對象的重要性。黃婆賣瓜,也得自賣自夸一下吧!Parameter對象有兩個非常重要的屬性:DBType和Value。DBType用來設(shè)置或獲取參數(shù)的類型,Value則用來設(shè)置或獲取參數(shù)的值。

      好了,現(xiàn)在我們用Parameter對象來改寫簡單的登陸驗證代碼:

1 strSQL = "SELECT * FROM users WHERE Name = @Name and Password = @Password";
2 SqlParamter[] paras = new SqlParamter[]{//參數(shù)數(shù)組
3 new SqlParamter("@Name",SqlDBType.Varchar,50)
4 new SqlParamter("@Password",SqlDBType.Varchar,50)};
5 paras[0].value = userName;//綁定用戶名
6 paras[1].value = password;//綁定用戶密碼

 

3.2 兩大得力助手:ConnectionStringBuilder和CommandBuilder

  • ConnectionStringBuilder:它提供一種用于創(chuàng)建和管理由 Connection 對象使用的連接字符串的內(nèi)容的簡單方法。 所有 ConnectionStringBuilder 對象的基類均為 DbConnectionStringBuilder 類。
  • CommandBuilder :它自動生成 DataAdapter 的命令屬性或從存儲過程中派生參數(shù)信息,并填充 Command 對象的 Parameters 集合。 所有 CommandBuilder 對象的基類均為 DbCommandBuilder 類。

 

4. 理解.NET數(shù)據(jù)提供程序

4.1 用于 SQL Server 的 .NET Framework 數(shù)據(jù)提供程序 (SqlClient)

      用于 SQL Server 的 .NET Framework 數(shù)據(jù)提供程序 (SqlClient) 使用自己的協(xié)議與 SQL Server 進行通信。 它是輕量的且性能良好,因為它進行了優(yōu)化,可直接訪問 SQL Server,而無需添加 OLE DB 或開放式數(shù)據(jù)庫連接 (ODBC) 層。 下圖4.1.1將用于 SQL Server 的 .NET Framework 數(shù)據(jù)提供程序與用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序進行對比。 用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序通過 OLE DB 服務(wù)組件(它提供連接池和事務(wù)服務(wù))和用于數(shù)據(jù)源的 OLE DB 訪問接口與 OLE DB 數(shù)據(jù)源進行通信。

       圖4.1.1  SQL Server 與 OLE DB .NET Framework 數(shù)據(jù)提供程序進行對比

      若要使用用于 SQL Server 的 .NET Framework 數(shù)據(jù)提供程序,您必須具有對 SQL Server 7.0 或更高版本的訪問權(quán)限。 用于 SQL Server 類的 .NET Framework 數(shù)據(jù)提供程序位于 System.Data.SqlClient 命名空間中。 對于早期版本的 SQL Server,請將用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序與 SQL Server OLE DB 訪問接口 System.Data.OleDb 一起使用。

      用于 SQL Server 的 .NET Framework 數(shù)據(jù)提供程序支持本地事務(wù)和分布式事務(wù)。 對于分布式事務(wù),默認情況下,用于 SQL Server 的 .NET Framework 數(shù)據(jù)提供程序會自動登記在事務(wù)中,并自動從 Windows 組件服務(wù)或 System.Transactions 獲取事務(wù)詳細信息。

      如果你使用SQL Server數(shù)據(jù)提供程序需要引入:

using System.Data.SqlClient;

4.2 用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序

      用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序 (OleDb) 通過 COM 互操作使用本機 OLE DB 來啟用數(shù)據(jù)訪問。 用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序支持本地事務(wù)和分布式事務(wù)。 對于分布式事務(wù),默認情況下,用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序會自動登記在事務(wù)中,并自動從 Windows 2000 組件服務(wù)獲取事務(wù)詳細信息。用于 OLE DB 類的 .NET Framework 數(shù)據(jù)提供程序位于 System.Data.OleDb 命名空間中。

      如果你使用OLE DB數(shù)據(jù)提供程序需要引入:

using System.Data.OleDb;

4.3 用于 ODBC 的 .NET Framework 數(shù)據(jù)提供程序

      用于 ODBC 的 .NET Framework 數(shù)據(jù)提供程序 (Odbc) 使用本機 ODBC 驅(qū)動程序管理器 (DM) 來啟用數(shù)據(jù)訪問。 ODBC 數(shù)據(jù)提供程序支持本地事務(wù)和分布式事務(wù)兩者。 對于分布式事務(wù),默認情況下,ODBC 數(shù)據(jù)提供程序會自動登記在事務(wù)中,并自動從 Windows 2000 組件服務(wù)獲取事務(wù)詳細信息。用于 ODBC 類的 .NET Framework 數(shù)據(jù)提供程序位于 System.Data.Odbc 命名空間中。

     如果你使用ODBC數(shù)據(jù)提供程序需要引入:

using System.Data.Odbc;

4.4 用于 Oracle 的 .NET Framework 數(shù)據(jù)提供程序

       用于 Oracle 的 .NET Framework 數(shù)據(jù)提供程序 (OracleClient) 通過 Oracle 客戶端連接軟件啟用對 Oracle 數(shù)據(jù)源的數(shù)據(jù)訪問。 該數(shù)據(jù)提供程序支持 Oracle 客戶端軟件 8.1.7 版或更高版本。 該數(shù)據(jù)提供程序支持本地事務(wù)和分布式事務(wù)兩者。

      用于 Oracle 的 .NET Framework 數(shù)據(jù)提供程序要求系統(tǒng)上安裝有 Oracle 客戶端軟件(8.1.7 版或更高版本),才能連接到 Oracle 數(shù)據(jù)源。

      用于 Oracle 類的 .NET Framework 數(shù)據(jù)提供程序位于 System.Data.OracleClient 命名空間中,并包含在 System.Data.OracleClient.dll 程序集中。 當(dāng)編譯使用該數(shù)據(jù)提供程序的應(yīng)用程序時,必須同時引用 System.Data.dll 和 System.Data.OracleClient.dll。

      如果你使用Oracle數(shù)據(jù)提供程序需要引入:

1 using System.Data;
2 using System.Data.OracleClient;

 

5. 選擇合適的 .NET 數(shù)據(jù)提供程序

      應(yīng)用程序或者數(shù)據(jù)源不同,我們就需要選擇不同的.NET數(shù)據(jù)提供程序。在此,微軟官方已經(jīng)給了我們很好的建議,如下表:

提供程序

說明

用于 SQL Server 的數(shù)據(jù)提供程序

建議用于使用 Microsoft SQL Server 7.0 或更高版本的中間層應(yīng)用程序。

建議用于使用 Microsoft 數(shù)據(jù)庫引擎 (MSDE) 或 SQL Server 7.0 或更高版本的單層應(yīng)用程序。

建議將用于 SQL Server 的 OLE DB 訪問接口 (SQLOLEDB) 與用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序一起使用。

對于 SQL Server 6.5 和更新版本,您必須將用于 SQL Server 的 OLE DB 訪問接口與用于 OLE DB 的 .NET Framework 數(shù)據(jù)提供程序一起使用。

用于 OLE DB 的數(shù)據(jù)提供程序

建議用于使用 SQL Server 6.5 或早期版本的中間層應(yīng)用程序。

對于 SQL Server 7.0 或更高版本,建議使用用于 SQL Server 的 .NET Framework 數(shù)據(jù)提供程序。

還建議用于使用 Microsoft Access 數(shù)據(jù)庫的單層應(yīng)用程序。 不建議將 Access 數(shù)據(jù)庫用于中間層應(yīng)用程序。

用于 ODBC 的數(shù)據(jù)提供程序

建議用于使用 ODBC 數(shù)據(jù)源的中間層應(yīng)用程序和單層應(yīng)用程序。

用于 Oracle 的數(shù)據(jù)提供程序

建議用于使用 Oracle 數(shù)據(jù)源的中間層應(yīng)用程序和單層應(yīng)用程序。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
6.4 數(shù)據(jù)提供程序
MVC-05 Model(1)
ASP個人上手指南
SQL SREVER 2005 安裝
數(shù)據(jù)訪問技術(shù)路線圖
SQL Server數(shù)據(jù)導(dǎo)出到Oracle的方案
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服