乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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ō),很是郁悶,但寫多了,慢慢會(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)買等信息,謹(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)論公約

        類似文章 更多