資源描述:
《sqlserver存儲過程返回值》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、SQLServer存儲過程的返回值一、先說下ExecuteScalar()與ExecuteNonQuery()ExecuteScalar方法返回的類型是object類型,這個方法返回sql語句執(zhí)行后的第一行第一列的值,由于不知道sql語句到底是什么樣的結構(有可能是int,有可能是char等等),所以ExecuteScalar方法返回一個最基本的類型object,這個類型是所有類型的基類,換句話說:可以轉換為任意類型。ExecuteNonQuery?來執(zhí)行目錄操作(例如查詢數(shù)據(jù)庫的結構或創(chuàng)建諸如表等的數(shù)據(jù)庫對象),或通過執(zhí)
2、行UPDATE、INSERT或DELETE語句,在不使用DataSet的情況下更改數(shù)據(jù)庫中的數(shù)據(jù)。由于UPDATE、INSERT或DELETE這些語句執(zhí)行后只有一個結果:“影響了**行”,所以此時ExecuteNonQuery方法返回的是影響的行數(shù)(int)。對于所有其他類型的語句,返回值為-1。如果發(fā)生回滾,返回值也為-1。ExecuteReader方法返回DataReader對象的時候,DataReader對象取出的列值要進行類型轉換,例如:txtName.Text=(string)dataReader["name"]
3、,雖然SQL中列的name本身就是字符串類型,但是通過dataReader["name"]這種方式訪問這個字段,必須強制類型轉換,因為dataReader["name"]就像一個數(shù)組,數(shù)組中的每個元素的類型都應該一樣,所以dataReader[]這個數(shù)組中的元素類型也被定義為object類型,以方便轉換。二、正式總結1.存儲過程沒有返回值的情況(即存儲過程語句中沒有return之類的語句)用方法intcount=ExecuteNonQuery(..)執(zhí)行存儲過程其返回值只有兩種情況(1)如果通過查詢分析器執(zhí)行該存儲過程,在
4、顯示欄中如果有影響的行數(shù),則影響幾行count就是幾(2)如果通過查詢分析器執(zhí)行該存儲過程,在顯示欄中如果顯示'命令已成功完成。'則count=-1;在顯示欄中如果有查詢結果,則count=-1總結:A.ExecuteNonQuery()該方法只返回影響的行數(shù),如果沒有影響行數(shù),則該方法的返回值只能是-1,不會為0。?????B.不論ExecuteNonQuery()方法是按照CommandType.StoredProcedure或者CommandType.Text執(zhí)行,其效果和A一樣。2.獲取存儲過程的返回值--通過查詢
5、分析器獲得??(1)不帶任何參數(shù)的存儲過程(存儲過程語句中含有return)---創(chuàng)建存儲過程CREATEPROCEDUREtestReturnASreturn145GO---執(zhí)行存儲過程DECLARE@RCintexec@RC=testReturnselect@RC?---說明查詢結果為145??(2)帶輸入?yún)?shù)的存儲過程(存儲過程語句中含有return)---創(chuàng)建存儲過程createproceduresp_add_table1??@in_namevarchar(100),??@in_addrvarchar(100),?
6、?@in_telvarchar(100)as??if(@in_name=''or@in_nameisnull)???return1??else???begin????insertintotable1(name,addr,tel)values(@in_name,@in_addr,@in_tel)????return0???end---執(zhí)行存儲過程<1>執(zhí)行下列,返回1declare@countintexec@count=sp_add_table1'','中三路','123456'select@count<2>執(zhí)行下列,返回0
7、declare@countintexec@count=sp_add_table1'','中三路','123456'select@count---說明查詢結果不是0就是1??(3)帶輸出參數(shù)的存儲過程(存儲過程中可以有return可以沒有return)例子A:---創(chuàng)建存儲過程createproceduresp_output??@outputintoutputas??set@output=121??return1---執(zhí)行存儲過程<1>執(zhí)行下列,返回121declare@outint?execsp_output@outout
8、put?select@out<2>執(zhí)行下列,返回1declare@outint?declare@countintexec@count=sp_output@outoutput?select@count---說明有return,只要查詢輸出參數(shù),則查詢結果為輸出參數(shù)在存儲過程中最后變成的值;只要不查詢輸出參