小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

c# 如何調(diào)用sql server 存儲(chǔ)過(guò)程

 悟靜 2014-04-24

c# 如何調(diào)用sql server 存儲(chǔ)過(guò)程

       調(diào)用sql server的存儲(chǔ)過(guò)程 需要一定的格式,這就像學(xué)刀法,格式就是刀譜,而對(duì)程序語(yǔ)言的理解就是心法,編程序不能只靠刀譜,每次編程都是從例子上拷貝粘貼,也不能只靠心法,否則語(yǔ)法混亂。這是一點(diǎn)編程的理解。

1,首先,需要?jiǎng)?chuàng)建一個(gè)存儲(chǔ)過(guò)程,例子如下

create   PROCEDURE dbo.ProcessMeetRec_SingleRec
@a int,
@b int output,
@c varchar(5) output
as

if @a = 1
begin
    select @c = 'a'
   select @b = 9
   return -1
end

if @b = 3
begin
   select @c = 'b'
   return -2
end
begin tran
insert book_user(logname) values('aaa')
if @@error <> 0
begin
   --插入簽到記錄失敗
   raiserror ('插入簽到記錄失敗',16,1) with seterror
   rollback tran
   return -9
end

return 1

注意,@b可以作為輸入輸出參數(shù),@a是輸入?yún)?shù),@c是輸出參數(shù)

2 ,定義一個(gè)調(diào)用存儲(chǔ)過(guò)程的方法

      public bool ProcessMeetRec_SingleRec(int a,ref int b,ref string c)
        {
            if (!CheckConn())
            {
                return false;
            }
            try
            {
                SqlCommand cmd = new SqlCommand("ProcessMeetRec_SingleRec", _cn);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
                cmd.Parameters["@a"].Value = a;

                cmd.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
                cmd.Parameters["@b"].Direction = ParameterDirection.InputOutput;
                cmd.Parameters["@b"].Value = 6;

                cmd.Parameters.Add(new SqlParameter("@c", SqlDbType.VarChar, 20));
                cmd.Parameters["@c"].Direction = ParameterDirection.Output;

                //存儲(chǔ)過(guò)程返回值
                cmd.Parameters.Add(new SqlParameter("@d", SqlDbType.Int));
                cmd.Parameters["@d"].Direction = ParameterDirection.ReturnValue;

                cmd.ExecuteNonQuery();
                int iRet = (int)cmd.Parameters["@d"].Value;
                b = (int)cmd.Parameters["@b"].Value;
                c = cmd.Parameters["@c"].Value.ToString();
                //返回值-1時(shí)失敗 0成功但記錄無(wú)效 1成功記錄有效
                if (iRet == -1)
                    return false;
                else
                    return true;
            }
            catch (Exception ex)
            {
                string e = ex.Message;
                MessageBox.Show(ex.Message, "");
                return false;
            }
        }

注意,其中把@b作為輸入輸出參數(shù),并且一定要賦值,否則會(huì)出錯(cuò)。其中的參數(shù)@d并沒(méi)有在存儲(chǔ)過(guò)程中定義,它表示存儲(chǔ)過(guò)程中return 語(yǔ)句返回的值。這堆程序開(kāi)始要記的,對(duì)于記性差的人來(lái)說(shuō),很是郁悶,但寫(xiě)多了,慢慢會(huì)記住,仔細(xì)看就行,不用刻意死記硬背。

另外,當(dāng)調(diào)用出錯(cuò)時(shí),比如insert book_user(logname) values('aaa')這句出錯(cuò)的話,存儲(chǔ)過(guò)程的   raiserror ('插入簽到記錄失敗',16,1) with seterror 這句會(huì)發(fā)生作用,'插入簽到記錄失敗'這句話會(huì)出現(xiàn)在ex.Message中。

2,在一個(gè)按鈕事件中編程如下

        private void btnUse_Click(object sender, EventArgs e)
        {
            int a =8;
            int b = 0;
            string c = "";
            this.ProcessMeetRec_SingleRec(a, ref b, ref c);
        }

注意,因?yàn)锧b是輸入輸出參數(shù),@c是輸出參數(shù),所以要使用ref。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多