轉(zhuǎn)帖|其它|編輯:郝浩|2011-07-13 14:42:04.000|閱讀 375 次
概述:根據(jù)返回值類(lèi)型的不同,我們可以將存儲(chǔ)過(guò)程分為三類(lèi):返回記錄集的存儲(chǔ)過(guò)程,返回?cái)?shù)值的存儲(chǔ)過(guò)程(也可以稱(chēng)為標(biāo)量存儲(chǔ)過(guò)程),以及行為存儲(chǔ)過(guò)程。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
根據(jù)返回值類(lèi)型的不同,我們可以將存儲(chǔ)過(guò)程分為三類(lèi):返回記錄集的存儲(chǔ)過(guò)程,返回?cái)?shù)值的存儲(chǔ)過(guò)程(也可以稱(chēng)為標(biāo)量存儲(chǔ)過(guò)程),以及行為存儲(chǔ)過(guò)程。
?。?)執(zhí)行一個(gè)沒(méi)有參數(shù)的存儲(chǔ)過(guò)程的代碼如下:
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcedure";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
然后只要選擇適當(dāng)?shù)姆绞綀?zhí)行此處過(guò)程,用于不同的目的即可。
(2)執(zhí)行一個(gè)有參數(shù)的存儲(chǔ)過(guò)程的代碼如下(我們可以將調(diào)用存儲(chǔ)過(guò)程的函數(shù)聲明為ExeProcedure(string inputdate)):
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcedure";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
(以上代碼相同,以下為要添加的代碼)
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
這樣就添加了一個(gè)輸入?yún)?shù)。
若需要添加輸出參數(shù):
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Output;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
若要獲得參儲(chǔ)過(guò)程的返回值:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.ReturnValue;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
從上面的代碼我們可以看出,當(dāng)存儲(chǔ)過(guò)程比較多或者存儲(chǔ)過(guò)程的參數(shù)比較多時(shí),這種方法會(huì)大大影響開(kāi)發(fā)的速度;另外一方面,如果項(xiàng)目比較大,那么這些用于數(shù)據(jù)庫(kù)邏輯的函數(shù)在以后的維護(hù)中也是一個(gè)很大的負(fù)擔(dān)。那么,有沒(méi)有一種改進(jìn)的方法可以解決這個(gè)問(wèn)題呢?想到在執(zhí)行沒(méi)有參數(shù)的存儲(chǔ)過(guò)程時(shí)只需要傳入一個(gè)存儲(chǔ)過(guò)程的名字就可以調(diào)用相應(yīng)的存儲(chǔ)過(guò)程,而且在SqlServer數(shù)據(jù)庫(kù)中我們可以直接在查詢(xún)分析器中敲入“存儲(chǔ)過(guò)程名(參數(shù)列表)”樣的字符串就可以執(zhí)行存儲(chǔ)過(guò)程,那么,是否可以把這種思想應(yīng)用到應(yīng)用程序中呢?
于是在編譯器中鍵入相應(yīng)代碼。這些代碼是在調(diào)用不帶參數(shù)的存儲(chǔ)過(guò)程的代碼的基礎(chǔ)上改的。具體代碼如下:
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcedure(’para1’,’para2’,para3)";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
為了使代碼更具有代表性,要調(diào)用的存儲(chǔ)過(guò)程的第一個(gè)和第二個(gè)參數(shù)都為字符串類(lèi)型,第三個(gè)參數(shù)為整型。執(zhí)行以后發(fā)現(xiàn),完全可以達(dá)到預(yù)期的效果!
兩種調(diào)用方法的比較
通過(guò)比較我們可以看到,第二種方法具有一個(gè)很明顯的優(yōu)點(diǎn),那就是可以提高開(kāi)發(fā)速度,節(jié)省開(kāi)發(fā)時(shí)間,而且代碼容易維護(hù),在一定程度上也減少了系統(tǒng)大小。但是,由于對(duì)存儲(chǔ)過(guò)程參數(shù)的處理比較籠統(tǒng),如果要獲取輸出參數(shù)或者得到存儲(chǔ)過(guò)程的返回值,這種方法就不能滿(mǎn)足需要了。雖然如此,但是,這種方法畢竟可以讓開(kāi)發(fā)人員少些很大一部分的代碼。如果不需要獲取輸出參數(shù)和返回值,那么幾乎可以做到“一勞永逸”。因此在實(shí)際的程序開(kāi)發(fā)中,這種方法還是具有一定的實(shí)用價(jià)值的。
網(wǎng)上雖然也有很多類(lèi)似的介紹,想對(duì)存儲(chǔ)過(guò)程有個(gè)更好的了解,征求網(wǎng)友們建議方法,有什么好的想法思路拿出來(lái)分享下,能夠更快的提供大家開(kāi)發(fā)進(jìn)度和效力來(lái)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載