上一期的文章中我們提到DataProvider模組,這個模組完成了各種資料來源的操作,相容的資料來源包括SQL SERVER資料庫、Oracle資料庫、XML檔案、文字檔案、Config站點配置檔案等。基本約束關係如下圖所示:
圖 2.1 DataProvider 基本約束關係
這個模組主要包括以下名稱空間:
● IsLine.Data.ContainerDefiner名稱空間:
IsLine.Data.ContainerDefiner是DataProvider的一個擴充套件,它定義了一些ADO.NET中常用的資料物件,以容器的角色出現在上層中,它可以根據一些列的快取策略,並根據這些策略對資料進行持久化,這個名稱空間依賴於名稱空間IsLine.HttpContent.HCDataTypeEnum。
主要成員類為ContainerDefine ,它實現了介面ISqlContainer, IOracleContainer, IFileContainer, IDisposable),其中的IFileContainer.FileContent方法,返回或設定一個FileContent,該FileContent為IfileContainer介面成員,包含快取優化選項,該選項可在例項化時指定;其他方法包括SqlDataReader、OracleDataReader、DataSet、DataRow、Dispose()都是對ADO.NET的二次封裝,但是又包含了一些優化操作,比如當儲存大型資料時,DataProvider會自動開啟快取機制,以提高資料讀取效率。
● IsLine.Data.DataProvider名稱空間:
這個名稱空間是DataProvider的主體,它完成了對資料的儲存操作。它依賴於名稱空間:IsLine.Security.Cryptography、IsLine.Data、IsLine.Data.Configuration。主要成員類名稱有DBProvider、OracleProvider(實現介面IOracleProvider)、SqlProvider(實現介面ISqlServerProvider)、FileProvider、XMLProvider、TextProvider、SuitConfigProvider。
你可以使用自定義的工廠,也可以直接使用IsLine FrameWork中定義好的方法DataProvider處理資料,使用DataProvider前,需要先在web.config中配置以下節點,新增於<configSections></configSections>之間:
<IsLine.Data.Configuration>
<DataBaseConnection>
<DBType>IsLine.Data.DataTypeEnum.DataBaseType.SqlServer</DBType>
<Server>Server IP</Server>
<UserID>sa</UserID>
<PwdType>Cryptography.Decrypting</PwdType>
<Pwd>111111</Pwd>
<DataBase>UML</DataBase> //SqlServer only
</DataBaseConnection>
</IsLine.Data.Configuration>
其中DataBaseConnection指明資料庫型別,PwdType指明密碼加密策略,IsLine Provider內建3中策略供選擇,如配置檔案所示。以上示例為針對SqlServer,對於Oralce資料庫,同樣採用以上的格式配置,只不過稍作變化:
將DBType變更為IsLine.Data.Configuration.OracleConnectString;Server節點指明TNS別名;同時多出了OtherPlus節點中的內容會作為Oracle連線串的一部分,傳送給資料庫。
<OtherPlus>Provider=MSDAORA.1; Persist Security Info=False;</OtherPlus>
以上方法為結構化配置方法,如果讀者覺得這樣配置比較麻煩,可以使用以下簡單配置方法,免去節點的配置:
SQL SERVER配置:
<add key=" IsLine.Data.Configuration.SqlServerConnectString " value="Data Source=Server IP;User;Password=111111;Integrated Security=no;Enlist=false;Pooling=true;" />
ORACLE 配置:
<add key="IsLine.Data.Configuration.OracleConnectString" value="Data Source=TNS別名;User;Password=111111;Integrated Security=no;Enlist=false;Pooling=true;" />
上面提到的兩種配置方法,可任選其一。節點配置好後,使用以下方法呼叫,呼叫時分為面向連線與非連線兩種方式,面向連線的操作(例如返回DataSet/Reader/Adapter等)使用前須進行例項化,使用後須呼叫.Dispost()方法釋放資源,Dispost()是一個經過DataProvider重寫的方法,一旦呼叫將會釋放所有資源,包括Connection、Command、DataReader等,而面向非連線操作則直接呼叫即可。如果使用DataReader、Adapter等為面向連線操作,單純執行sql語句為非連線操作,例如訪問資料庫單純執行依據sql語句可以使用:
OracleProvider.ExecuteNonQuery()或SqlProvider.ExecuteNonQuery(),而有些方法是需要例項化才能使用的,例如:
OracleProvider op = new OracleProvider();
op.SomeFunc();
如果各位讀者希望得到更加詳細的方法與引數列表,請訪問我的部落格。
下面為大家列出一些執行的例項:
1.執行一句sql語句:
OracleProvider.ExecuteNonQuery(sql);
2.利用事務執行一批sql語句:
OracleProvider.ExecuteNonQuery(sql,true,CommandType.Text,null);
其中第二個引數說明開啟事務,執行第一個引數傳入的語句,語句之間以“!”號分隔。
3.執行一個儲存過程:
OracleProvider.ExecuteNonQuery(StoredProcedureName,null,CommandType.StoredProcedure, OracleParam);
4.返回一個DataReader
new OracleProvider().ExecuteReader(sql);
6.使用指定連線返回一個DataSet
new OracleProvider().ExecuteDataSet(sql,"ConnectionStr",0);
以上只是幾個很簡單的例子,總之使用DataProvider,就可以實現通過配置控制資料庫,而程式碼層面只有操作語句,沒有資料庫連線、配置語句的目的了。
在下一期,我們將完成資料訪問的最後一部分的介紹。
此文已在《軟體報》同步釋出,任何個人媒體不得轉載。