新聞中心
ADO.NET2.0還是比較常用的,于是我研究了一下ADO.NET2.0數(shù)據(jù)庫(kù),在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。下面開(kāi)始我要說(shuō)的利用ADO.NET2.0及以上版本新增的工廠式數(shù)據(jù)庫(kù)訪問(wèn)實(shí)現(xiàn)應(yīng)該系統(tǒng)的無(wú)縫切換,要實(shí)現(xiàn)無(wú)縫切換,當(dāng)然還是要有前提條件了,就是各個(gè)不同的數(shù)據(jù)庫(kù)之間的表和其它對(duì)象都已經(jīng)成功移植了,沒(méi)有這個(gè)前提,純用ADO.NET2.0中數(shù)據(jù)庫(kù)做系統(tǒng)無(wú)縫切換那是不可能的了,比如SQLSERVER中寫(xiě)的存儲(chǔ)過(guò)程,自定義函數(shù)直接復(fù)制到ORACLE上就行了嗎?當(dāng)然是不行,寫(xiě)法及變量定義要做些調(diào)整才可以成功移植的,還有變結(jié)構(gòu)字段類(lèi)型等等的都可能是要做相應(yīng)調(diào)整,這些都做好了才能談系統(tǒng)的無(wú)縫切換。

#T#要做的無(wú)縫切換,數(shù)據(jù)庫(kù)訪問(wèn)層的代碼中最好(并非絕對(duì))不應(yīng)該出現(xiàn)SqlCommand,SqlDataAdapter,SqlClient,SqlXXX吧,要切換到ORACLE數(shù)據(jù)上ORACLE里可以O(shè)racleCommand,OracleXXX,還有程序執(zhí)行帶參數(shù)語(yǔ)句時(shí),UserName,UserAge,如果在ORACLE里這么命名的話,系統(tǒng)開(kāi)發(fā)過(guò)程中的那種痛苦也許只有經(jīng)歷過(guò)的人才知道,ORACLE堅(jiān)持大寫(xiě)為標(biāo)準(zhǔn),記得很久很久以前的一個(gè)夏天的晚上,那時(shí)我還是年輕的80后,一位數(shù)據(jù)庫(kù)設(shè)計(jì)比較N的人提到過(guò),盡量在數(shù)據(jù)庫(kù)設(shè)計(jì)和T-SQL編程中采用大寫(xiě)標(biāo)準(zhǔn),基本上接觸的SQLSERVER數(shù)據(jù)庫(kù)較多,也習(xí)慣了表名,字段名的大寫(xiě)設(shè)計(jì),后來(lái)發(fā)現(xiàn)確實(shí)是有道理的。
這里提到的問(wèn)題都是在下面的各個(gè)方法中為了兼容不同的數(shù)據(jù)庫(kù)需要面對(duì)的問(wèn)題,具體講到每個(gè)執(zhí)行方法時(shí)再具體解釋。剛才說(shuō)SqlCommand,OracleComand都是各自認(rèn)得,但是DbCommand可是大家都認(rèn)得的,暫且叫抽象對(duì)象吧,還有DbConnection,DbDataAdapter等都是他們都認(rèn)得的,所以在做支持多數(shù)據(jù)庫(kù)訪問(wèn)類(lèi)庫(kù)時(shí),就可以用這些對(duì)象了,根據(jù)這些對(duì)象再創(chuàng)建具體對(duì)象。ADO.NET2.0數(shù)據(jù)庫(kù)訪問(wèn)工廠中有個(gè)DbProviderFactory對(duì)象,也就是通常說(shuō)的DataProvider了,正是這個(gè)起了關(guān)鍵和方便的作用,是用來(lái)創(chuàng)建提供程序?qū)?shù)據(jù)源類(lèi)的實(shí)現(xiàn)的實(shí)例(就是用來(lái)創(chuàng)建實(shí)例)。另外數(shù)據(jù)庫(kù)操作還要用到參數(shù)吧,DbParameter,DbParameterCollection下面都需要用到,先貼一段類(lèi)庫(kù)的構(gòu)造函數(shù),因?yàn)楣灿脤?duì)象需要先實(shí)例化。
- publicDbConnectionconn;//抽象類(lèi)型
- privateDbCommandcmd;//抽象類(lèi)型
- privateDbProviderFactoryprovider;
- privateDbParameterPara;//不同數(shù)據(jù)庫(kù)參數(shù)類(lèi)型的抽象類(lèi)型
- privateDbDataAdapterAdapter;//對(duì)應(yīng)不同數(shù)據(jù)庫(kù)的數(shù)據(jù)適配器
- Dictionary
,String>ParametersFormat;//不同數(shù)據(jù)庫(kù)參數(shù)格式化類(lèi)型 - publicstringretParaformat=string.Empty;//最終返回的格式化標(biāo)志,如@{0},:{0}
- publicDataProviderFactory()
- {
- //從配置文件中取出標(biāo)示數(shù)據(jù)庫(kù)類(lèi)型的字符串并通過(guò)ProviderName的不同支持不同類(lèi)型的數(shù)據(jù)庫(kù)
- stringproviderName=ConfigurationManager.ConnectionStrings["ConnStr"].ProviderName;//也可以用索引,從1開(kāi)始
- //創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)的實(shí)例,使用該實(shí)例就可以創(chuàng)建對(duì)應(yīng)的connection,command和adapater等等對(duì)象
- provider=DbProviderFactories.GetFactory(providerName);
- //創(chuàng)建具體的數(shù)據(jù)庫(kù)連接類(lèi)型和命令執(zhí)行類(lèi)型
- conn=provider.CreateConnection();
- conn.ConnectionString=ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
- cmd=provider.CreateCommand();
- cmd.Connection=conn;
- //創(chuàng)建具體的參數(shù)類(lèi)型
- Para=provider.CreateParameter();
- //創(chuàng)建具體的適配器類(lèi)型
- Adapter=provider.CreateDataAdapter();
- //不同數(shù)據(jù)庫(kù)參數(shù)前綴格式化
- ParametersFormat=newDictionary
,String>(); - ParametersFormat.Add(typeof(System.Data.SqlClient.SqlCommand),"@{0}");//因SQLSERVER只返回{0}沒(méi)有@前綴,在此初始化處理
- //返回格式化標(biāo)志
- retParaformat=GetParameterFormat(cmd);
- }
網(wǎng)站題目:新手必看篇之ADO.NET2.0數(shù)據(jù)庫(kù)
分享鏈接:http://m.5511xx.com/article/cdsschd.html


咨詢(xún)
建站咨詢(xún)
