/// <summary> /// [SQL Server] 데이터테이블 반환(프로시저) /// </summary> /// <param name="param">첫 번째 인자는 프로시저명, 두 번째부터는 파라미터들</param> /// <returns>데이터테이블</returns> public DataTable GetDataTable(params object[] param) { // SQL Server용 DataTable 반환 함수입니다. // 프로시저 전용이므로, ad-hoc 쿼리를 이용하실 수는 없습니다. } /// <summary> /// [SQL Server] 데이터테이블 반환(Ad-hoc 쿼리) /// </summary> /// <param name="_strQuery">Ad-hoc 쿼리문</param> /// <returns>데이터테이블</returns> public DataTable GetDataTable(string _strQuery) { // SQL Server용 DataTable 반환 함수입니다. // ad-hoc 쿼리 전용이므로, 프로시저도 이용하실 수 있지만 권장하지는 않습니다. } /// <summary> /// [Oracle] 데이터테이블 반환(프로시저) /// </summary> /// <param name="_strProcedureName">프로시저명</param> /// <param name="_inputParams">Input 파라미터 </param> /// <param name="_outputParams">Output 파라미터 </param> /// <returns>데이터테이블</returns> public DataTable GetDataTable(string _strProcedureName, Dictionary<object, object> _inputParams, params string[] _outputParams) { // Oracle용 DataTable 반환 함수입니다. // 프로시저 전용이므로, ad-hoc 쿼리를 이용하실 수는 없습니다. } /// <summary> /// [Oracle] 데이터테이블 반환(Ad-hoc 쿼리) /// </summary> /// <param name="_strQuery">Ad-hoc 쿼리문</param> /// <returns>데이터테이블</returns> public DataTable GetDataTable(string _strQuery) { // Oracle용 DataTable 반환 함수입니다. // ad-hoc 쿼리 전용이므로, 프로시저도 이용하실 수 있지만 권장하지는 않습니다. }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetDataTable.aspx.cs" Inherits="BANANA.Web.Framework.Test.jmson.GetDataTable" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>GetDataTable</title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" /> </form> </body> </html>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; namespace BANANA.Web.Framework.Test.jmson { public partial class GetDataTable : BANANA.Web.BasePage { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { try { DataTable _dt = base.GetDataTable( "WSP_Employees_R1" // 첫 번째 파라미터는 프로시저 명을 입력해 주세요. , "King" // 두번째 부터는 프로시저에 전달할 변수를 입력하시면 됩니다. ); GridView1.DataSource = _dt; GridView1.DataBind(); } catch (Exception err) { // err.HelpLink에는 프로시저 실행구문이 있습니다. // SQL Profiler를 실행하지 않아도, 사용자가 실행한 프로시저 및 전달 변수들을 확인하실 수 있습니다. MessageBox.Show(err.HelpLink + "<br />" + err.Message , "데이터베이스 오류" , MessageBox.MessageBoxType.Alert , MessageBox.MessageBoxIcon.Error ); } } } } }
CREATE PROC WSP_Employees_R1 ( @LastName NVARCHAR(20) ) AS SELECT * FROM dbo.Employees WHERE LastName LIKE '%' + @LastName + '%'
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; namespace BANANA.Web.Framework.Test.jmson { public partial class GetDataTable : BANANA.Web.BasePage { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { try { string _strLastName = "King"; DataTable _dt = base.GetDataTable( "SELECT * FROM Northwind.dbo.Employees WHERE LastName LIKE '%" + _strLastName + "%'" ); GridView1.DataSource = _dt; GridView1.DataBind(); } catch (Exception err) { MessageBox.Show(err.Message , "데이터베이스 오류" , MessageBox.MessageBoxType.Alert , MessageBox.MessageBoxIcon.Error ); } } } } }
-- Package Spec 정의 CREATE OR REPLACE PACKAGE PKG_EMPLOYEES AS TYPE T_CURSOR IS REF CURSOR; PROCEDURE WSP_EMPLOYEES_R1 ( I_LASTNAME IN VARCHAR2 , I_EMPLOYEEID IN NUMBER , O_EMPLOYEES OUT T_CURSOR ); END PKG_EMPLOYEES;
-- Package Body 정의 CREATE OR REPLACE PACKAGE BODY PKG_EMPLOYEES AS PROCEDURE WSP_EMPLOYEES_R1 ( I_LASTNAME IN VARCHAR2 , I_EMPLOYEEID IN NUMBER , O_EMPLOYEES OUT T_CURSOR ) IS BEGIN -- EMPLOYEES OPEN O_EMPLOYEES FOR SELECT * FROM EMPLOYEES WHERE LASTNAME LIKE '%'||I_LASTNAME||'%' AND EMPLOYEEID > I_EMPLOYEEID; END WSP_EMPLOYEES_R1; END PKG_EMPLOYEES;
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; namespace BANANA.Web.Framework.Test.jmson { public partial class GetDataTable : BANANA.Web.BasePage { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { try { // 우선 Input 파라미터를 Dictionary 개체로 정의합니다. // 프로시저에서 정의한 순서대로 Dictionary 개체에 추가해 주는 것을 잊지 마세요. // 순서가 뒤바뀌면, 오류가 발생합니다. Dictionary<object, object> dic = new Dictionary<object, object>(); dic.Add("I_LASTNAME", "King"); dic.Add("I_EMPLOYEEID", 2); DataTable _dt = base.GetDataTable( "PKG_EMPLOYEES.WSP_EMPLOYEES_R1"// 프로시저명에는 [패키지명.프로시저명]의 형식으로 입력해 주세요. , dic // Input 파라미터가 담겨져 있는 Dictionary 개체를 전달합니다. , "O_EMPLOYEES" // Output 파라미터 커서명을 입력합니다. ); GridView1.DataSource = _dt; GridView1.DataBind(); } catch (Exception err) { MessageBox.Show(err.Message , "데이터베이스 오류" , MessageBox.MessageBoxType.Alert , MessageBox.MessageBoxIcon.Error ); } } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; namespace BANANA.Web.Framework.Test.jmson { public partial class GetDataTable : BANANA.Web.BasePage { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { try { DataTable _dt = base.GetDataTable( "SELECT * FROM EMPLOYEES;" // 쿼리를 하나의 string으로 입력해 주시면 됩니다. ); GridView1.DataSource = _dt; GridView1.DataBind(); } catch (Exception err) { MessageBox.Show(err.Message , "데이터베이스 오류" , MessageBox.MessageBoxType.Alert , MessageBox.MessageBoxIcon.Error ); } } } } }