SQL Server 저장 과정 이 C\#에서 호출 되 는 간단 한 실현 방법

0.안내
【정 의】:저장 프로 세 스(Stored Procedure)는 대형 데이터베이스 시스템 에서 특정한 기능 을 수행 하기 위 한 SQL 구문 집합 으로 데이터베이스 에 저장 되 어 있 으 며,한 번 의 컴 파일 후 영구적 으로 유효 합 니 다.사용 자 는 저장 프로 세 스 의 이름 을 지정 하고 파 라 메 터 를 제공 합 니 다(이 저장 프로 세 스 가 파 라 메 터 를 가지 고 있다 면).
[장단 점]:저장 과정의 장단 점 이 뚜렷 합 니 다!거의 모든 편의 저장 과정 을 토론 하 는 문 자 는 다른 장점 은 balabala 이 고 단점 은 balabala 라 고 말 하지만 마지막 으로 작가 의 결론 은'저 는 저장 과정 을 사용 하 는 것 을 추천 하지 않 습 니 다'라 는 것 입 니 다.
구체 적 인 저장 과정의 장단 점 은 여기 서 상세 하 게 설명 하지 않 겠 습 니 다!
회사 의 오래된 프로젝트 는 저장 과정 을 사용 하여 업무 논 리 를 실현 하여 어 쩔 수 없 이 연구 할 수 밖 에 없 었 다.🙃!
잡담 은 하지 마라.책 은 본론 으로 돌아 가 고 다음은 저장 과정 을 시작한다!
1.문법 세부 사항
변수 와 변수 사이 에 쉼표 로 구분 하고 문장의 끝 에 구두점 기호 가 없습니다.
성명 변수:declare @variate_name variate_type예 를 들 어 성명 과 할당:declare @name nvarchar(50) ='shanzm'변수 할당:set @variate_name =value인쇄 변수:print @variate_namebegin...end 사이 의 SQL 문 구 를 코드 블록 이 라 고 합 니 다.
if...else 를 사용 하여 논리 적 판단 을 실현 할 수 있 습 니 다.
저장 프로시저 생 성:create procedure pro_name실행 저장 프로시저:execute pro_name출력 매개 변수:저장 과정 은 SQL 문 구 를 조회 한 결 과 를 되 돌려 줍 니 다.매개 변 수 를 정의 한 후에 output 를 추가 하고 출력 매개 변수(C\#에서 출력 매개 변수 와 유사)로 설정 합 니 다.반환 값 이 하나 더 있 는 것 과 같 습 니 다!
저장 프로시저 생 성 기본 형식:

create procedure pro_name_tableName
@param1 param1_type,
@param2 param2_type,
as
begin 
  --sql  
end
go
2.예시 1:모 의 이체
① 예시 배경:저장 과정 을 사용 하여 예금증서 에서 사용자 와 사용자 간 의 이 체 를 실현 하 는 것 을 모 의 한다.
② 준비 작업 1:데이터베이스 에 표 szmBank 만 들 기

CREATE TABLE [dbo].[szmBank](
 [Id] [bigint] IDENTITY(1,1) NOT NULL,
 [Balance] [decimal](18, 0) NOT NULL
테스트 데이터 추가:
Id                   Balance
---------------      ----------------
1                    1000
2                    2000
3                    3000
③ 준비 작업 2:C\#코드 에 포 함 된 SQL 보조 클래스 SqlHelper
패키지 에 주의 할 때 CommandType 인자 가 있어 야 합 니 다.SQL 문 구 를 실행 할 지 저장 할 지 결정 합 니 다.
CommandType 은 매 거 진 형식 입 니 다.그 중에서 Text 값 은 SQL 문 구 를 실행 하 는 것 이 고 StoreProcedure 는 저장 과정 을 실행 하 는 것 입 니 다.
구체 적 인 포장 세부 사항 은 여기 서 상술 하지 않 겠 다.
2 년 전에 제 가 봉 인 했 던 SqlHelper.cs 를 찾 았 습 니 다.일반적인 사용 에는 문제 가 없습니다.참고 하 시기 바 랍 니 다.

#region
// ===============================================================================
// Project Name    :  
// Project Description : 
// ===============================================================================
// Class Name     :  SqlHelper
// Class Version    :  v1.0.0.0
// Class Description  :  SQL     
// CLR         :  4.0.30319.18408 
// Author       :  shanzm
// Create Time     :  2018-8-14 18:22:59
// Update Time     :  2018-8-14 18:22:59
// ===============================================================================
// Copyright © SHANZM-PC 2018 . All rights reserved.
// ===============================================================================
#endregion

using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace _16StoreProcedure
{
  public class SqlHelper
  {
    private static readonly string connStr =
      ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

    /// <summary>
    ///          
    /// </summary>
    /// <param name="sql">SQL       </param>
    /// <param name="type">    </param>
    /// <param name="param">  </param>
    /// <returns></returns>
    public static DataTable GetDataTable(string sql, CommandType type, params SqlParameter[] param)
    {
      using (SqlConnection conn = new SqlConnection(connStr))
      {
        using (SqlDataAdapter adapter = new SqlDataAdapter(sql, conn))
        {
          if (param != null)
          {
            adapter.SelectCommand.Parameters.AddRange(param);
          }

          adapter.SelectCommand.CommandType = type;
          DataTable da = new DataTable();
          adapter.Fill(da);
          return da;
        }
      }
    }


    /// <summary>
    ///       
    /// </summary>
    /// <param name="sql">SQL       </param>
    /// <param name="type">    </param>
    /// <param name="param">  </param>
    /// <returns></returns>
    public static int ExecuteNonquery(string sql, CommandType type, params SqlParameter[] param)
    {
      using (SqlConnection conn = new SqlConnection(connStr))
      {
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
          if (param != null)
          {
            cmd.Parameters.AddRange(param);
          }
          cmd.CommandType = type;
          conn.Open();
          return cmd.ExecuteNonQuery();

        }
      }

    }

    /// <summary>
    ///                    
    /// </summary>
    /// <param name="sql">SQL       </param>
    /// <param name="type">    </param>
    /// <param name="param">  </param>
    /// <returns></returns>
    public static object ExecuteScalar(string sql, CommandType type, params SqlParameter[] param)
    {
      using (SqlConnection conn=new SqlConnection (connStr ))
      {
        using (SqlCommand cmd=new SqlCommand (sql,conn))
        {
          if (param !=null )
          {
            cmd.Parameters.AddRange(param);
          }
          cmd.CommandType = type ;
          conn.Open();
          return cmd.ExecuteScalar();
        }
      }
    }

  }
}
④ 저장 프로시저 작성:
데이터베이스 에서:지정 한 데이터베이스-->프로 그래 밍 가능-->저장 프로 세 스-->오른쪽 키:새로 만 들 기-->저장 프로 세 스:
SQL Server 에서 작 성 된 SQL 문 구 는 기본 포맷 되 지 않 았 습 니 다.모든 코드 레이아웃 은 제 습관 대로 Tab 들 여 쓰기 입 니 다.
편집기 에 넣 고 아래 저장 과정 을 보 는 것 을 권장 합 니 다.좀 예 쁠 것 입 니 다!
SQL 대소 문 자 는 민감 하지 않 습 니 다.저 는 소문 자 에 익숙해 서 읽 기 편 합 니 다!

-- =============================================
-- Author: shanzm
-- Create date: 2020 5 2  19:56:51
-- Description:         
-- =============================================
create procedure pro_transfer_szmbank
@from bigint,
@to bigint,
@balance decimal(18,0),
@returnNum int output--(1      ,2    ,3      )
as
begin
 --              
 declare @money decimal(18,0)
 select @money=Balance from dbo.szmBank where Id=@from; 
 if @money-@balance>=0.1 
   --    
  begin 
  begin transaction
   declare @sum int =0
   --      
   update szmBank set balance=balance-@balance where id=@from
   set @sum=@sum+@@error
   --      
   update szmBank set balance=balance+@balance where id=@to
   set @sum=@sum+@@error
   --      
   if @sum<>0
   begin
    set @returnNum=2--    
    rollback
   end
   else
   begin
    set @returnNum=1--    
    commit
   end
  end
 else
 begin
  set @returnNum=3--    
 end
end
go
데이터베이스 에서 테스트 실행(F5):

--    :
declare @ret int
execute pro_transfer_szmbank 
@from='1',
@to='2',
@balance='10',
@returnNum=@ret output--                 "output"
print @ret --     :1,         
[주의]:
4.567917.우 리 는 특정한 저장 과정 을 볼 필요 가 있 으 면 데이터 에 있 는 자체 저장 과정 으로 볼 수 있다.4.567918.
  • sp_helptext pro_transfer_szmBank
  • 4.567917.기 존의 저장 과정 을 수정 하고 오른쪽 키 저장 과정->수정:표 시 된 저장 과정 은 저장 과정 에서 create 를 alert 로 바 꾸 는 것 일 뿐 입 니 다
  • SQL Server 의 SQL 창 에서 일부 SQL 문 구 를 선택 하고 실행 을 클릭 하면 선택 한 SQL 문 구 를 실행 할 수 있 습 니 다
  • ⑤ 콘 솔 에서 테스트
    새 콘 솔 항목 을 만 들 고 설정 파일 에 연결 문자열 을 추가 합 니 다.
    봉 인 된 SqlHelper 에서 데이터베이스 연결 문자열 을 설정 파일 에서 읽 어야 하기 때문에 인용 을 추가 합 니 다:System.configuration
    
    static void Main(string[] args)
    {
      //     Id
      int from = 1;
      //     Id
      int to = 2;
      //    
      decimal balance = 10;
    
      SqlParameter[] param =
      {
        new SqlParameter ("@from",from),
        new SqlParameter("@to",to),
        new SqlParameter ("@balance",balance),
        //-------------------------------  :         
        new SqlParameter ("@returnNum",System.Data.SqlDbType.Int{Direction=System.Data.ParameterDirection.Output }
      };
    
      //------------------------  CommonType StorProcedure  
      SqlHelper.ExecuteNonquery("pro_transfer_szmbank",System.Data.CommandType.StoredProcedure, param);
    
      //------------------------      
      //            
      int outPutparam = Convert.ToInt16(param[3].Value);
    
      switch (outPutparam)
      {
        case 1: Console.WriteLine($"success: Id:{from}  {balance}  Id:{to}");break;
        case 2: Console.WriteLine("error"); break;
        case 3: Console.WriteLine("    "); break;
      }
    
      Console.ReadKey();
    }
    테스트 결과:
    success:Id:1 에서 10 원 에서 Id:2 로 이체
    3.예제 2:테스트 는 DataTable 로 되 돌아 갑 니 다.
    ① 저장 프로시저:
    
    create procedure [dbo].[pro_ReturnDataTable]
    as
    begin
     select Id as   ID ,Balance as    from szmBank;
    end
    go
    ② 데이터베이스 테스트:
    
    execute pro_ReturnDataTable
    테스트 결과:szmBank 의 모든 데 이 터 를 표시 합 니 다.
    ③ 콘 솔 테스트:
    
    static void Main(string[] args)
    {
      DataTable dt = SqlHelper.GetDataTable("pro_ReturnDataTable", CommandType.StoredProcedure);
      foreach (DataRow row in dt.Rows)
      {
        Console.WriteLine(row["  ID"].ToString() + ":" + row["  "].ToString());
      }
      Console.ReadKey();
      //TransferAccounts();
      ReturnDataTable();
    } 
    테스트 결과:szmBank 의 모든 데 이 터 를 인쇄 합 니 다.
    4.소스 코드 다운로드
    C\#에서 저장 프로시저 사용-소스 코드 다운로드
    필요 한 데이터베이스 테이블 은 예시 에서 설명 되 었 습 니 다.테이블 문 구 를 직접 사용 하여 만 들 수 있 습 니 다!
    저장 프로 세 스 의 SQL 문 구 는 예제 에서 완전 하 게 보 여 주 었 습 니 다.직접 복사 할 수 있 습 니 다!
    총결산
    SQL Server 저장 과정 이 C\#에서 호출 되 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 SQL Server 저장 과정 은 C\#호출 내용 입 니 다.이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기