[SqlDataSource] 웹 서버 컨트롤 개요
SqlDataSource 웹 서버 컨트롤 개요
SqlDataSource 컨트롤을 사용하면 웹 컨트롤을 사용하여 OLE DB와 ODBC 데이터 소스는 물론 Microsoft SQL Server와 Oracle 데이터베이스 같은 관계형 데이터베이스에 있는 데이터에 액세스할 수 있습니다. GridView, FormView 및 DetailsView 컨트롤처럼 데이터를 표시하는 다른 컨트롤과 SqlDataSource 컨트롤을 함께 사용하여 코드를 거의 사용하지 않고 ASP.NET 웹 페이지에서 데이터를 표시하거나 조작할 수 있습니다.
SqlDataSource 컨트롤을 데이터 소스에 연결
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataReader"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT LastName FROM Employees">
</asp:SqlDataSource>
<asp:ListBox
id="ListBox1"
runat="server"
DataTextField="LastName"
DataSourceID="SqlDataSource1">
</asp:ListBox>
</FORM>
</BODY>
</HTML>
SqlDataSource 컨트롤을 사용하여 데이터 명령 실행
SelectCommand, UpdateCommand, DeleteCommand 및 InsertCommand라는 최대 네 개의 명령(SQL 쿼리)을 SqlDataSource 명령에 지정할 수 있습니다. 각 명령은 데이터 소스 컨트롤의 개별 속성입니다. 각 명령 속성에 대해 데이터 소스 컨트롤에서 실행할 SQL 문을 지정합니다. 저장 프로시저를 지원하는 데이터베이스에 데이터 소스 컨트롤이 연결되면 SQL 문 대신 저장 프로시저의 이름을 지정할 수 있습니다.
런타임에 제공할 값의 자리 표시자를 포함하여 매개 변수가 있는 명령을 만들 수 있습니다. 다음 예제에서는 매개 변수가 있는 SQL Select 명령을 보여 줍니다.
Select CustomerID, CompanyName From Customers Where City =
@city
런타임에 명령이 매개 변수 값을 가져오는 위치(예: 다른 컨트롤, 쿼리 문자열 등)를 지정하는 매개 변수 개체를 만들 수 있습니다. 또는 프로그래밍 방식으로 매개 변수 값을 지정할 수도 있습니다. 자세한 내용은 SqlDataSource 컨트롤에 매개 변수 사용을 참조하십시오.
데이터 소스 컨트롤은 해당하는 Select, Update, Delete 또는 Insert 메서드가 호출되면 명령을 실행합니다. Select 메서드는 페이지 또는 데이터 소스 컨트롤에 바인딩된 컨트롤의 DataBind 메서드를 호출하면 자동으로 호출됩니다. 또한 데이터 소스 컨트롤에서 명령을 실행하려는 경우 네 가지 메서드 중 하나를 명시적으로 호출할 수 있습니다.
GridView와 같은 일부 컨트롤에서는 이러한 네 개의 메서드를 호출하거나 DataBind 메서드를 명시적으로 호출할 필요 없이 자동으로 메서드를 호출할 수 있습니다.
자세한 내용은 SqlDataSource 컨트롤을 사용하여 데이터 선택 및 SqlDataSource 컨트롤을 사용하여 데이터 수정을 참조하십시오.
DataSet 또는 DataReader 개체 반환
SqlDataSource 컨트롤은 DataSet 개체 또는 ADO.NET 데이터 판독기라는 두 가지 형식으로 데이터를 반환할 수 있습니다. 데이터 소스 컨트롤의 DataSourceMode 속성을 설정하여 반환 형식을 지정할 수 있습니다. DataSet 개체에는 서버 메모리의 모든 데이터가 포함되어 있으며 데이터를 가져온 후 다양한 방법으로 조작할 수 있습니다.
데이터 판독기는 개별 레코드를 페치할 수 있는 읽기 전용 커서를 제공합니다. 일반적으로 데이터를 가져온 후 데이터를 필터링, 정렬 또는 페이징하려는 경우나 캐시를 유지 관리하려는 경우에 데이터 집합을 반환하도록 선택합니다.
이와 달리 단순히 데이터를 반환하기만 하고 페이지의 컨트롤을 사용하여 이 데이터를 표시하려는 경우에는 데이터 판독기를 사용합니다.
예를 들어 결과 목록이 읽기 전용 형식으로 표시되는 ListBox, DropDownList 또는 GridView 컨트롤에 표시할 데이터를 반환하려면 데이터 판독기를 사용하는 것이 좋습니다.
SqlDataSource.SelectCommand 속성
<HTML>
<BODY>
<FORM runat="server">
<asp:DropDownList
id="DropDownList1"
runat="server"
DataTextField="LastName"
DataSourceID="SqlDataSource1" />
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommandType="StoredProcedure"
SelectCommand="sp_lastnames">
</asp:SqlDataSource>
<!--
The sp_lastnames stored procedure is
CREATE PROCEDURE sp_lastnames AS
SELECT LastName FROM Employees
GO
-->
</FORM>
</BODY>
</HTML>
SqlDataSource 컨트롤에 매개 변수 사용
SELECT * FROM Employees WHERE LastName = @LastName AND FirstName = @FirstName
라는 쿼리를 실행시키고 싶을때....
명명된 매개 변수를 사용하는 경우 명령에 대한 매개 변수 컬렉션에 지정된 매개 변수의 순서는 별로 중요하지 않습니다. 그러나 SQL 명령에 사용하는 매개 변수의 이름이 연결된 컬렉션에 있는 매개 변수의 이름과 일치하도록 해야 합니다.
다음 예제에서는 System.Data.SqlClient 공급자를 사용하는 SqlDataSource 컨트롤에 대한 SQL 명령에 명명된 매개 변수를 사용하는 방법을 보여 줍니다.
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"
InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName);
SELECT @EmpID = SCOPE_IDENTITY()"
UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName WHERE EmployeeID=@EmployeeID"
DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID" ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>" OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
RunAt="server">
<SelectParameters>
<asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" /> </SelectParameters>
<InsertParameters>
<asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:sqlDataSource>
SqlDataSource 컨트롤의 필터링을 사용하도록 설정
SqlDataSource 컨트롤을 사용하면 쿼리를 다시 실행하지 않고도 쿼리 결과를 필터링(정렬 또는 선택)할 수 있습니다. SqlDataSource 컨트롤에 필터링을 추가하면 쿼리가 실행된 후 데이터베이스로 돌아가지 않고도 SqlDataSource를 통해 사용할 수 있는 데이터를 변경할 수 있습니다.
SqlDataSource 컨트롤의 필터링을 사용하도록 설정하려면
-
유효한 연결 문자열과 Select 문을 사용하여 SqlDataSource 컨트롤을 만듭니다. 자세한 내용은 방법: SqlDataSource 컨트롤을 사용하여 SQL Server 데이터베이스에 연결을 참조하십시오.
-
SqlDataSource 컨트롤의 DataSourceMode 속성을 DataSet로 설정합니다.
-
SqlDataSource 컨트롤의 EnableCaching 속성을 true로 설정합니다.
필터링을 지원하려면 쿼리에서 반환된 데이터를 캐싱해야 합니다.
-
SqlDataSource 컨트롤의 CacheDuration 속성을 데이터를 캐싱할 시간(초)으로 설정합니다. 응용 프로그램에 따라 적절한 값을 선택합니다.
-
다음 예제처럼 컨트롤의 FilterExpression 속성을 반환할 데이터를 지정하는 식으로 설정합니다.
7번 설명 country = 'Germany'
필터 식 구문에 대한 자세한 내용은 RowFilter를 참조하십시오.
필터링을 사용하도록 설정된 SqlDataSource 컨트롤은 다음과 같은 형태가 됩니다.
<asp:SqlDataSource
ID="SqlDataSource1"
DataSourceMode="DataSet"
EnableCaching="true"
Runat="server"
SelectCommand="Select * From Customers" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
FilterExpression="
country = 'Germany'">
</asp:SqlDataSource>
위에는 별로 쓸모가 없네 ... 밑으로
매개 변수를 사용하여 SqlDataSource 컨트롤을 필터링하려면
-
SqlDataSource 컨트롤의 FilterExpression 속성을 필터 매개 변수 값의 자리 표시자가 포함된 식으로 설정합니다. 자리 표시자에는
{
n}
구문을 사용합니다. 여기서 n은 매개 변수의 순서를 나타냅니다.다음 예제에서는 매개 변수가 있는 필터 식을 보여 줍니다. 두 번째 필터 식에는 매개 변수 자리 표시자가 여러 개 포함되어 있습니다.
FilterExpression="category = '{0}'" FilterExpression="country = '{0}' AND city = '{1}'"
FilterParameters 요소를 SqlDataSource 요소의 자식으로 만듭니다. 각 필터 매개 변수 자리 표시자에 대해 다음 중 한 형식의 요소를 추가합니다.
-
ControlParameter
-
CookieParameter
-
FormParameter
-
ProfileParameter
-
SessionParameter
-
Parameter
다음 예제에서는 DropDownList 컨트롤에서 값을 가져오는 필터 매개 변수를 만드는
방법을 보여 줍니다.
<FilterParameters>
<asp:ControlParameter Name="CategoryList" ControlID="DropDownList1" PropertyValue="SelectedValue" />
</FilterParameters>
매개 변수의 Name 속성은 필수 속성입니다.
그러나 매개 변수는 이름이 아니라 순서에 따라 자리 표시자와 대응합니다.
<asp:SqlDataSource
ID="SqlDataSource1"
EnableCaching="true"
DataSourceMode="DataSet"
Runat="server"
SelectCommand="Select * from Customers" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString1 %>"
FilterExpression="
country = '{0}'">
<FilterParameters>
<asp:ControlParameter Name="countryparam" ControlID="DropDownList1" PropertyName="SelectedValue" /> <
/FilterParameters>
</asp:SqlDataSource>
사용자가 컨트롤 하기
사용자가 임의로 컨트롤 할 수 있따 아래는 삭제 예제 그럼 인설트 등등도 응용하면 되겠네
~~~
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e) { /* 예전에 는 이런방식으로. SqlConnection conn = new SqlConnection(AspxUtil.GetDBStr()); conn.Open(); SqlCommand comm = new SqlCommand("DELETE FROM COMMENT_BOARD WHERE IDX=@IDX", conn); comm.Parameters.Add("@IDX", SqlDbType.Int).Value = e.CommandArgument; comm.ExecuteNonQuery(); conn.Close(); this.DataList1.DataBind(); * */ 간단하게 구현된거~ 열라간단하다 SqlDataSource1.DeleteParameters["idx"].DefaultValue = e.CommandArgument.ToString(); SqlDataSource1.Delete(); }
당연한 얘기지만 SqlDataSource에는 삭제 커멘드와
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ...
DeleteCommand="DELETE FROM [COMMENT_BOARD] WHERE [idx] = @idx"
/>
<DeleteParameters>
<asp:Parameter Name="idx" Type="Int32" />
</DeleteParameters>
파라메터 값이 있어야 한다
사용자 임의 삭제 참고 MSDN
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ko/dv_aspnetcon/html/44c76175-34b4-4dec-95d7-f9f6fd1fe00d.htm
'C#.NET DB' 카테고리의 다른 글
[IMAGE] 데이터베이스에 이미지 저장하기 (1) | 2010.01.07 |
---|---|
[ SqlDataSource , FilterExpression ] 초간단 데이터검색방법 , 필터링 사용 설정 (0) | 2009.12.15 |
[DataTable] 데이타테이블 간단한 사용법 및 검색방법 (0) | 2009.12.15 |
[DataSet]간단한 DataAdapter와 DataSet 만들기 (0) | 2009.12.15 |
[OleDbDataAdapter] 업데이트 , 삭제 , 셀렉트 속성 (0) | 2009.12.15 |
[SqlTransaction ] ADO.NET 수동 트랜잭션을 코딩하는 방법 (0) | 2009.12.15 |
[MSDN 트렌젝션]TransactionScope (0) | 2009.12.15 |
DataTable 데이터 xml로 저장하기 (0) | 2009.12.15 |
[트렌젝션]TransactionScope (0) | 2009.05.20 |
웹에서 간단하게 오라클 쿼리하기 (0) | 2009.05.19 |