SQL Server 저장 과정 이 C\#에서 호출 되 는 간단 한 실현 방법
【정 의】:저장 프로 세 스(Stored Procedure)는 대형 데이터베이스 시스템 에서 특정한 기능 을 수행 하기 위 한 SQL 구문 집합 으로 데이터베이스 에 저장 되 어 있 으 며,한 번 의 컴 파일 후 영구적 으로 유효 합 니 다.사용 자 는 저장 프로 세 스 의 이름 을 지정 하고 파 라 메 터 를 제공 합 니 다(이 저장 프로 세 스 가 파 라 메 터 를 가지 고 있다 면).
[장단 점]:저장 과정의 장단 점 이 뚜렷 합 니 다!거의 모든 편의 저장 과정 을 토론 하 는 문 자 는 다른 장점 은 balabala 이 고 단점 은 balabala 라 고 말 하지만 마지막 으로 작가 의 결론 은'저 는 저장 과정 을 사용 하 는 것 을 추천 하지 않 습 니 다'라 는 것 입 니 다.
구체 적 인 저장 과정의 장단 점 은 여기 서 상세 하 게 설명 하지 않 겠 습 니 다!
회사 의 오래된 프로젝트 는 저장 과정 을 사용 하여 업무 논 리 를 실현 하여 어 쩔 수 없 이 연구 할 수 밖 에 없 었 다.🙃!
잡담 은 하지 마라.책 은 본론 으로 돌아 가 고 다음은 저장 과정 을 시작한다!
1.문법 세부 사항
변수 와 변수 사이 에 쉼표 로 구분 하고 문장의 끝 에 구두점 기호 가 없습니다.
성명 변수:
declare @variate_name variate_type
예 를 들 어 성명 과 할당:declare @name nvarchar(50) ='shanzm'
변수 할당:set @variate_name =value
인쇄 변수:print @variate_name
begin...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.
새 콘 솔 항목 을 만 들 고 설정 파일 에 연결 문자열 을 추가 합 니 다.
봉 인 된 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\#호출 내용 입 니 다.이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
우분투에 SQL 서버 설치Microsoft SQL Server는 오늘날 업계에서 가장 눈에 띄는 데이터베이스 중 하나입니다. 이번 포스팅에서는 우분투에 설치하는 방법을 알려드리겠습니다. sudo 권한이 있는 계정 1단계: 터미널 열기 단축키...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.