MSSQL 2008 R2와 Razor를 이용한 웹 사이트를 만들고 있습니다. 뭐 거의 쇼핑몰 비스무리한거?

어쨌든 Webmatrix 에서 주는 헬퍼 클래스들은 웹매트릭스 이용자에게 쉽게 다가가는 기능을 제공합니다.

그래서 그런지 ASP.NET을 예전에 많이 경험해 보신 중고급 실무자 등등 분들에게는 익숙치 않으리라 생각됩니다.

그래서 제가 직접 겪어본 경험과 외국 포럼에 대한 MVP 설명 등을 인용해 짤막하게 정리하겠습니다.


저도 비즈니스 영역에서 프로시저 호출할때 아웃풋을 어떻게 해결해야 할지 열나게 난감했습니다.

하지만 Database 헬퍼를 여러 확인하고 외국 포럼을 뒤져가면서 판단한 결과

"프로시저만 호출하는 방법이나 기능이 없다" 라는 결론을 내렸습니다.

일단 Database의 장점은 DbConnection 등의 DB를 다루는 기초 클래스에 상속된 모든 DB 커넥션을 대상으로 하여

web.config 에 명시한 타입을 선언하여 기초 클래스의 메서드를 호출하는 식으로 구성해서 유연한 면이 있습니다.

즉, 이 클래스는 SqlCe,SqlClient도 모자라 MySQL,Oracle 등의 타 DB 클래스도 다룰 수 있는 이점이 있죠.

하지만 이 헬퍼는 SqlCe 같은 가벼운 데이터베이스에 중점을 맞췄기 때문에 프로시저 호출이나 파라미터 설정같은

고급 기능이 빠져 있습니다. SqlCe에서는 프로시저나 함수 기능이 없거든요. 그래서 거기까지 접근을 안한 겁니다

그래서 SqlCommand 에서 질의문 형식은 당연히 Text 이며 StoredProcedure 같은 옵션 설정 따위는 제공하지 않습니다.

결국 질의문으로 모두를 해결해야 합니다. 하지만 방법이 없다는건 절대 아닙니다.

변수를 선언하고 프로시저를 명시적으로 호출하고 SELECT 문으로 나오게 하면 됩니다.

프로시저 이름이 MYPROCUDURE 가 있고, VARCHAR,INT 두 인자를 입력하며 VARCHAR(50) 타입의 인자를 출력한다고 가정했을 때 이런 식으로 호출하면 됩니다.

DECLARE @RETURN VARCHAR(50)

EXEC MYPROCEDURE @0,@1,@RETURN OUTPUT

SELECT @OUTPUT

이 질의문을 Database.QuerySingle 메서드로 받으면 출력 변수를 받을 수 있겠죠?

dynamic result = db.QueryValue(sql,var1,var2);//@0,@1은 입력 변수이며 외부에서 받을 수 있다는걸 아실 겁니다.

아참, 변수들은 칼럼명이 없기 때문에 출력 변수가 여러개일 경우 SELECT 시 명시적으로 칼럼명을 넣어주시는거 잊지마세요.





profile
20대 언제나 쿨한 개발(犬足)자.