摘要:本文介紹了ADO.net技術的工作原理及其對象模型,并以IPTV系統為實例闡述了ADO.net技術在系統開發中的應用。該系統在數據的訪問速度、數據交換、開放性能及網絡支持等方面有明顯的優勢,性能得到了很大的提高。
關鍵詞:ADO.net數據訪問技術;SQL Server2000;IPTV點播系統
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)19-30143-03
ADO.net Data Access Technology in the System of IPTV
DENG Ting1,2, WANG Jia-yang1
(1.School of Information Science and Engineering, Central Sourth University, Changsha 410083, China; 2.Hunan Vocational College of Science and Technology, Changsha 410118, China)
Abstract: This paper introduces the principle of ADO.net technology and object model, and IPTV system as an example to the ADO.net described in the Application Development System. The system speed data access, data exchange, open network performance and support, has obvious advantages, performance was much improved.
Key words: ADO.net data access technology; SQL Server2000; IPTV-on-Demand System
1 引言
IPTV全稱是Internet Protocol Television,中文名稱是因特網協議電視,或者是交互式網絡電視。它主要是以機頂盒(STB Set-Top-Box)+電視機、電腦、手機、PDA等具有連接Intenret功能的設備作為用戶終端,通過IP網為用戶提供多媒體交互信息的通信系統。IPTV可提供多種多媒體服務功能,包括數字電視節目、可視IP電話、DVDNCD播放、互聯網瀏覽、電子郵件以及多種在線信息咨詢、娛樂、教育及商務功能。我們采用Visual C++6.0為開發平臺,采用ADO技術開發了這套系統。Visual C++提供了簡單、靈活、訪問速度快、可擴展性強的開發技術, 而這也是Visual C++的優勢所在。在Visual C++提供的幾種主要、易用的方法當中。以ActiveX技術為基礎的ADO.net是為Microsoft最新和最強大的數據訪問接口OLE DB而設計的,它為OLE DB提供了簡單一致的高層編程接口,在系統數據訪問方面具有極大的靈活性,并且易于學習和運用。下面以IPTV點播系統為實例,闡述ADO.net技術在系統開發當中的應用。
2 IPTV點播系統
IPTV點播系統是充分利用B/S體系結構,建立一個實用、快速、實用方便的管理信息系統,把對各級服務器的操作和管理過渡到一個真正開放的、與平臺無關的環境中。
2.1 系統結構介紹
IPTV點播系統中的內容管理系統實現對系統中媒體內容的集中管理,包括內容信息和內容分布狀態的管理和維護功能。此系統采用B/S模式,服務器采用操作系統為Windows NT,客戶機平臺可以是Windows 9x,Windows NT等,數據庫采用SQL Server 2000。系統的開發平臺是Visual C++(VC)6.0,利用它可以方便地開發C/S或者B/S模式的應用程序。VC 6.0具有多種數據庫服務接口,但最具有競爭力的是ADO.net,本系統即采用ADO.net技術。
2.2 系統功能設計
本論文討論IPTV點播系統中的內容管理模塊的設計。包括如下:
(1)發布點類型管理;
(2)文件分發管理;
(3)發布點內容管理:
①發布點管理(啟動禁用發布點、查看修改發布點、添加刪除發布點);
②文件管理。
3 ADO.net技術及其應用
ADO.NET是基于.NET框架、面向分布式和以XML數據格式為核心的數據訪問技術,它提供了一組數據訪問服務的類,ADO.NET統一了數據容器類編程接口,無論編寫何種應用程序都可以通過同一組類來處理數據。無論后端數據源是SQL Server數據庫、Oracle數據庫、其他數據庫、XML文件,還是一個文本文件,都使用一樣的方式來處理它們。同時,為了方便程序員使用ADO.NET,它還提供了一組豐富的控件,利用可視化方式開發數據庫應用。
ADO. NET支持多種開發需求,包括創建由應用程序、工具、語言或Internet瀏覽器使用的前端數據庫客戶端和中間層業務對象。設計ADO.NET的目的是為了滿足這一新編程模型的以下要求:具有斷開式數據結構;能夠與XML緊密集成;具有能夠組合來自多個、不同數據源的數據的通用數據表示形式以及具有為與數據庫交互而優化的功能,這些要求都是.NET Framework固有的內容。
ADO.NET包含兩大核心控件,分別是.NET Framework數據提供程序和DataSet.NET Framework數據提供程序用于連接到數據庫、執行命令和檢索結果,它包括四個核心對象。Connection對象用于與特定的數據源建立連接。Command對象用于對數據源執行命令。DataReader對象用于從數據源中讀取只向前的只讀數據流,它是一個簡易的數據集,另外一個數據集是DataSet。DataAdapter對象用于用數據源的數據填充DataSet數據集并解析更新數據集。DataSet是一個功能豐富、較復雜的數據集,它是支持ADO.NET的斷開式、分布式數據方案的核心對象。DataSet表示包括相關表、主外鍵約束和表間關系在內的整個數據集。DataSet專門用來處理從數據源獲得的數據,無論數據來自什么數據源,它都使用相同的方式操作數據。
通常,使用ADO.NET開發數據庫應用程序應遵循以下幾個步驟:
(1)選擇所使用的數據源,即選擇使用哪個.NET Framework數據提供程序;
(2)使用Connection對象建立與數據源的連接;
(3)使用Command對象完成對數據源的連接;
(4)使用數據集對獲得的數據進行各種操作,即利用DataReader對象或DataSet對象;
(5)緩存數據;
(6)使用各種數據控件,如DataGrid控件顯示數據。
4 ADO.net技術在IPTV點播系統中的應用
4.1 引入ADO庫文件
使用ADO前必須在工程的stdafx.h文件里用直接引入符號#import引入ADO庫文件,代碼如下所示:
#import \"c:\\program files\\common files\\system\\ado\\msado15.dll\"
no namespaces rename(\"EOF\" adoEOF\")
4.2 初始化OLE/COM庫環境
因為ADO庫是一組COM動態庫,所以應用程序在調用ADO前,必須初始化OLE/COM庫環境。在MFC應用程序里,一般是在應用程序主類的InitInstance成員函數里用AfxOleInit()初始化OLE/COM庫環境。
4.3 使用ADO基本接口
ADO庫包含三個基本接口:ConnectionPtr、CommandPtr和RecordsetPtr,為了便于使用分別定義指Connection對象、Command對象和Recordset對象的指針,它們分別為m_pConnection、m_pCommand和m_pRecordset。下面介紹指針的定義和在VC++中的使用。
(1)創建Connection對象并連接數據庫
①定義一個指向Connection對象的指針:ConnectionPtr m_pConnection;
②創建Connection對象實例:m_pConnection.CreateInstance(\"ADODB.Connection\");
③連接并打開數據庫。以下列舉一些常用的連接方式:
為了統一編程和方便修改,我們創建通用數據連接文件(*.UDL),這樣當數據源改變時,只需修改對應udl文件設置數據源,無需更改軟件程序。下面是訪問不同類型數據源設置ConnectionString的標準:
訪問ODBC數據
\"Provide=MSDASQL;DSN=dsnName;UID=username;PWD=userPassword;\"
訪問MS SQL數據庫
\"Provide=SOLOLEDB;Data Source=serverName;Initial Catalog=databaseName;
User ID=username;Password=userPassword\"
下面代碼示例就是使用mydata.udl(假設創建了該UDL文件)連接并打開數據庫:
m_PConnection->ConnectionString=\"File Name=C:\\mydir\\mydata.udl\"
m_PConnection->Open(\"\",\"\",\"\",NULL);
Connection對象除Open方法外還有許多方法,我們先介紹Connection對象中兩個有用的屬性ConnectionTimeOut與State。
ConnectionTimeOut用來設置連接的超時時間,需要在Open之前調用。例如,設置超時時間為5秒:
m_pConnection->ConnectionTimeout=5;//設置超時時間為5秒
m_pConnection->ConnectionStrin2=\"File Name=C:\\mydir\\mydata.udl\"
m_PConnection->Open(\",\"\",\"\",NULL);
State屬性指明當前Connection對象的狀態,O表示關閉,1表示已經打開,我們可以通過讀取這個屬性來作相應的處理,例如:如果已經打開了連接則關閉它。
if(m_PConnection->State)
m_pConnection->Close();
利用Execute方法執行SQL命令:
Execute執行完后返回一個指向記錄集的指針,下面我們給出具體代碼并作說明。
variant t RecordsAffected;
///執行SQL命令:CREATE TABLE創建表格users,users包含四個字段:整型ID,字符串username,整型old,日期型birthday
m_pConnection->Execute(\"CREATE TABLE users(1D INTEGER. username
TEXT,old INTEGER,birthday DATETIME)\",RecordsAffected,adCmdText):
///往表格里面添加記錄
m_pConnection->Execute(\"INSERT INTO users(ID,username,old,birthday)
VALUES(1001,'長江七號',90,'2007/12/25')\",RecordsAffected,adCmdText);
///將所有記錄old字段的值加1
m _pConnection->Execute(\"UPDATE Users SET old=old+1\",RecordsAffected,adCmdText);
///執行SQL統計命令得到包含記錄條數的記錄集
m_pRecordset=m_pConnection->Execute(\"SELECT COUNT(*) FROM users\",
RecordsAffected,adCmdText);
variant t vlndex=(1ong)0;
variant t vCount=m_pRecordset->GetCollect(vIndex);///取得第一個字段的值放入vCount變量
m_pRecordset->Close();///關閉記錄集
CString message;
message.Format(\"共有%d條記錄\",vCount.IVa1);
AfxMessageBox(messaRe);///顯示當前記錄條數
(2)創建Command對象并執行SQL命令
定義一個指向Command對象的指針:CommandPtr m_pCommand;
創建Command對象實例:m_pCommand.Creatlnstance(\"ADODB.Command\");
執行SQL命令:
variant t vNULL;vNULL.vt=VT ERROR:
VNULL.scode=DISP E PARAMNOTFOUND;///定義為無參數
m_pCommand->ActiveConnection=m_pConnection;///將建立的連接賦值給它
m_pCommand->CommandText=\"SELECT*FROM users\";///命令字串
m_pRecordset=m_pCommand->Exccute(vNULL,vNULL,adCmdText);///執行命令,取得記錄集
(3)創建Recordset對象并操作記錄集
定義一個指向Recordset對象的指針:RecordsetPtr m_pRecordset;
創建Recordset對象實例:m_pRecordset.CreateInstance(\"ADODB.Recordset\");
查詢取得記錄集:m_pRecordset->Open(\"SELECT *FROM users\",variant t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
遍歷更新記錄集:
variant t vUsername,vBirthday,vID,vOld;
關閉記錄集:m_pRecordset.Close();
參考文獻:
[1] David Sceppa.Microsoft(r)ADO.NET(Core Reference)[M].Microsoft Press,2002.
[2] senjeev Rohilla,Senthil Nathan,Surbhi Malhotra. 陳君,王寶良,譯. ADO.NET專業項目實例開發[M].北京:中國水利水電出版社,2003.
[3] 周緒,管麗娜,白海波.SQL Server2000中文版入門與提高[M].北京:清華大學出版社,2002.
[4] 陸冬云,溫浩,許志宏.以客戶為中心的瀏覽器服務器(B/S)網絡計算模型明[J].計算機與應用,2001(7):335-342.