ASP.NET

13.ADO.NET - DbProviderFactory

Godffs 2009. 9. 25. 12:09
반응형
FrmDbProviderFactory.aspx

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

        <asp:GridView ID="ctlCategoryList" runat="server">

        </asp:GridView>

   

    </div>

    </form>

</body>

</html>


FrmDbProviderFactory.aspx.cs

protected void Page_Load(object sender, EventArgs e)

{

   if (!Page.IsPostBack)

   {

       DisplayData();

   }

}

 

private void DisplayData()

{

   //[!] SQL Server, Oracle, Access DB에서 모두 똑같은 코드로 작성하고자한다면???

   //[1] Configuration 정보 가져오기 : ProviderName 따른 공급자 결정

   DbProviderFactory factory = DbProviderFactories.GetFactory(

       ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName);


   //[2] 커넥션 : SqlConnection, OleDbConnection 등을 DbConnection으로 통일

   DbConnection con = factory.CreateConnection();

   con.ConnectionString =

       ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

   con.Open();


   //[3] 커멘드 : SqlCommand, OracleCommand 등을 DbCommand 공통처리

   DbCommand cmd = factory.CreateCommand();

   cmd.Connection = con;

   cmd.CommandText =

       "Select * From Categories Where Num Between @First And @Second";

   cmd.CommandType = System.Data.CommandType.Text;


   //[!] 파라미터 추가

   DbParameter first = cmd.CreateParameter();

   first.ParameterName = "@First";

   first.DbType = System.Data.DbType.Int32;

   first.Value = 1;

 

   DbParameter second = cmd.CreateParameter();

   second.ParameterName = "@Second";

   second.DbType = System.Data.DbType.Int32;

   second.Value = 20;

 

   cmd.Parameters.Add(first);

   cmd.Parameters.Add(second);


   //[4] 데이터리더 : SqlDataReader, OleDbDataReader => DbDataReader

   DbDataReader dr = cmd.ExecuteReader();


   //[5] 바인딩

   this.ctlCategoryList.DataSource = dr;

   this.ctlCategoryList.DataBind();


   //[6] 마무리

   con.Close();

}


결과확인

[그림13-1]



반응형