달력

102018  이전 다음

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  


RegularExpressionValidator를 써서 구현 하면 된다. 정규식은 아래와 같다.

[^\s]{6,20} : 첫자가 스페이스가 들어가면 안되고 6자이상 20자 이하의 문자
.*[^A-Za-z0-9].* : A-Z, a-z, 0-9 이외의 문자가 하나 이상 들어갈 것

RegularExpressionValidator를 두개 만들어서 각각 걸어주었다.


// 실제 예
<asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server"
ControlToValidate="EDT_NEW_PW"
ErrorMessage="Password consist of at least 6 characters, with no leading spaces."
Display="None" Text = "*"
ValidationExpression="[^\s]{6,20}">
</asp:RegularExpressionValidator>          
    
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server"
ControlToValidate="EDT_NEW_PW"
ErrorMessage="Password must contain at least on non-alphanumeric character."
Display="None" Text = "*"
ValidationExpression=".*[^A-Za-z0-9].*">
</asp:RegularExpressionValidator>

// 2007. 8. 7 : 내용이 다 깨져보여서 살짝 편집~

Posted by 알이씨


요구사항 : 동적으로 구성한 Table Control의 상태를 유지
배경 : Database에서 특정 데이터를 가져와 가공한 뒤 사용자의 입맛에 맞게 테이블로 그 결과를 구성하였다. 하지만 다른 컨트롤을 조작하여 PostBack이 일어난다면 이전에 바운딩한 테이블 정보들이 모두 초기화 된다. 따라서 PostBack이 일어나도 이전 단계의 테이블 상태를 유지하는 것이 필요하였다.
조건 : 테이블 내용이 바뀔 필요가 없는 경우 PostBack이 일어난 뒤 DB 접근은 하지 않는다.

예제 코드

 Table Table_Work_History;

protected void Page_Load(object sender, EventArgs e)
{
    if(Page.IsPostBack){            
        if(Session["Table"] != null){
            Table_Work_History = (Table)Session["Table"]; // 저장된 테이블 상태 로딩
            PH.Controls.Add(Table_Work_History); // PH : Place Holder
        }           
    }
}

protected void rend_working()
{
    // Bounding Code

    Session["Table"] = Table_Work_History; // 테이블 상태를 세션에 저장
}

참고 :
 - Place Holder를 쓴이유는 테이블을 로딩한 후에 특정 위치에 넣어주기 위함이다.
 - Session을 이용하여 상태를 저장한 이유는 ViewState를 사용하면 Serializable 예외가 발생하기 때문이다.
        

Posted by 알이씨


목표 : TreeView의 각 노드에 체크박스를 두고 부모를 체크 하면 자식들은 모두 부모에 따름

웹 검색을 하다가 유용한 자료가 있어서 퍼왔습니다. 출처는 제일 아래에 있네요.
저는 이 소스를 다 쓴건 아니고 스크립트 부분만 썼습니다. PostBack 방식으로 했는데.
아무래도 좀 불편한거 같네요...
=====================================================================
체크 박스 이므로 여러개를 선택할수 있도록 체크 박스를 선택할때마다 이벤트가 발생하지는 않습니다.

그래서 약간의 편법을 이용한 자료를 올려 보겠습니다.


1. postback 처리

<%@ Page Language="C#" %>

<script runat="server">
protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
    foo(e.Node, e.Node.Checked);
}
private void foo(TreeNode e, bool check)
{
    e.Checked = check;
    foreach (TreeNode t in e.ChildNodes)
    {
        foo(t, check);
    }
}

</script>


<script>
function foo()
{
    var o = window.event.srcElement;
    if (o.tagName == "INPUT" && o.type == "checkbox"){
        __doPostBack("","");
    }
}
</script>

<html>

<head id="Head1" runat="server">

</head>

<body>

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

        <div>

            <asp:TreeView onclick="foo()" ID="TreeView1" runat="server" ExpandDepth="4" EnableClientScript="False"

                ShowCheckBoxes="All" OnTreeNodeCheckChanged="TreeView1_TreeNodeCheckChanged">

                <Nodes>

                    <asp:TreeNode ShowCheckBox="True" Value="a" Text="a">

                        <asp:TreeNode Value="aa" Text="aa">

                            <asp:TreeNode Text="aaa" Value="aaa">

                                <asp:TreeNode Text="aaaa" Value="aaaa"></asp:TreeNode>

                                <asp:TreeNode Text="abbb" Value="abbb"></asp:TreeNode>

                            </asp:TreeNode>

                            <asp:TreeNode Text="bbb" Value="bbb">

                                <asp:TreeNode Text="bbbb" Value="bbbb"></asp:TreeNode>

                            </asp:TreeNode>

                            <asp:TreeNode Text="ccc" Value="ccc"></asp:TreeNode>

                        </asp:TreeNode>

                    </asp:TreeNode>

                    <asp:TreeNode Text="bb" Value="bb">

                        <asp:TreeNode Text="bbb" Value="bbb"></asp:TreeNode>

                    </asp:TreeNode>

                </Nodes>

            </asp:TreeView>

        </div>

    </form>

</body>

</html>


2. 웹페이지상에서 스크립트로 처리 ..

<%@ Page Language="C#" %>

<html >

<head id="Head1" runat="server">

    <title>XML Tree View</title>

    <script language="javascript">

        //***each node in a TreeNode is a <table> and the level that a node exists on is

        //***decided by the number of columns in the table (that are use to push it out)

        //***CAVEATS

        //***(1)This only works with a static TreeView

        //***(2)This only works properly if EnableClientScript=true

        //***(3)If Microsoft(R) changes the HTML use to render the Nodes then this is obsolete

        //***(4)This does not account for all design considerations, but should be a good start

        function client_OnTreeNodeChecked() {      

            var obj = window.event.srcElement;

            var treeNodeFound = false;

            var checkedState;

           

            if (obj.tagName == "INPUT" && obj.type == "checkbox") {

                //easier to read

                var treeNode = obj;

               

                //record the checked state of the TreeNode

                checkedState = treeNode.checked;

               

                //work our way back to the parent <table> element      

                do {

                    obj = obj.parentElement;

                } while (obj.tagName != "TABLE")

           

                //keep track of the padding level for comparison with any children

                var parentTreeLevel = obj.rows[0].cells.length;

           

                //get all the TreeNodes inside the TreeView (the parent <div>)

                var tables = obj.parentElement.getElementsByTagName("TABLE");

               

                //total number of TreeNodes

                var numTables = tables.length


                if (numTables > 1) {

                    //cycle through all the TreeNodes

                    //until we find the TreeNode we checked

                    for (i=0; i < numTables; i++) {

                        if (tables[i] == obj) {

                            treeNodeFound = true;

                            i++;

                            if (i == numTables) {

                                //if we're on the last

                                //TreeNode then stop

                                return;

                            }

                        }

                       

                        //when found examine the TreeLevel of each of

                        //the preceding TreeNodes

                        if (treeNodeFound == true) {

                            var childTreeLevel = tables[i].rows[0].cells.length;

                           

                            //if the current node is under the parent

                            //the level will be deeper (greater)

                            if (childTreeLevel > parentTreeLevel) {

                           

                                //jump to the last cell... it contains the checkbox

                                var cell = tables[i].rows[0].cells[childTreeLevel - 1];

                               

                                //set the checkbox to match the checkedState

                                //of the TreeNode that was clicked

                                var inputs = cell.getElementsByTagName("INPUT");

                                inputs[0].checked = checkedState;

                            } else {

                                //if any of the preceding TreeNodes are not deeper stop

                                return;

                            }//end if

                        }//end if

                    }//end for

                }//end if

            }//end if

        }//end function

    </script>

</head>

<body>

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

    <asp:XmlDataSource ID="xmlSrc" runat="server" />

    <div>

    <asp:TreeView

        onclick="client_OnTreeNodeChecked();"

        ID="staticTree"

        runat="server"

        ExpandDepth="0"

        ShowCheckBoxes="All"

        EnableClientScript="true"

        ShowExpandCollapse="true"

        ShowLines="true"

        >

        <Nodes>

            <asp:TreeNode Text="Table of Contents"

            SelectAction="None">

                   

                <asp:TreeNode Text="Chapter One">

               

                    <asp:TreeNode Text="Section 1.0">

                   

                        <asp:TreeNode Text="Topic 1.0.1"/>

                        <asp:TreeNode Text="Topic 1.0.2"/>

                        <asp:TreeNode Text="Topic 1.0.3"/>

                   

                    </asp:TreeNode>

                   

                    <asp:TreeNode Text="Section 1.1">

                   

                        <asp:TreeNode Text="Topic 1.1.1"/>

                        <asp:TreeNode Text="Topic 1.1.2"/>

                        <asp:TreeNode Text="Topic 1.1.3"/>

                        <asp:TreeNode Text="Topic 1.1.4"/>

                   

                    </asp:TreeNode>

               

                </asp:TreeNode>

               

                <asp:TreeNode Text="Chapter Two">

               

                    <asp:TreeNode Text="Section 2.0">

                   

                        <asp:TreeNode Text="Topic 2.0.1"/>

                        <asp:TreeNode Text="Topic 2.0.2"/>

                   

                    </asp:TreeNode>

               

                </asp:TreeNode>

               

            </asp:TreeNode>

            <asp:TreeNode Text="Appendix A" />

            <asp:TreeNode Text="Appendix B" />

            <asp:TreeNode Text="Appendix C" />

        </Nodes>

    </asp:TreeView>

    </div>

    </form>

</body>

</html>


필요한걸 사용하시면 될듯하네요 ..


=========================

Visual C# MVP Freecoder

http://freecoder.pe.kr

=========================

Posted by 알이씨


딱 아래와 같은 내용을 찾았었다.

출처 : 데브피아
주소 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=8&MAEULNo=5&no=81&ref=63

//////////////////////////////////////////////////////////////////////////////////
ASP.NET 중에서 큰 부분은 아니지만, 가장 신경쓰이는 부분중의 하나가 client-script과의 연동문제입니다. 그중에서 제일 신경 쓰였던 부분이 메세지 박스에 대한 처리였습니다.
웹에서 저장,삭제 버튼이 클릭된다면, 바로 저장되는 것이 아니라, 사용자에게 메세지박스를 띄어서확인을 해야하는데, 지금부터 그 부분을 다루려고 합니다...
코딩부분은 간단합니다. 저의 경우에는 Btn_Delete라는 "삭제" 버튼을 생성했습니다.

this.Btn_Delete.Attributes.Add("onclick","return confirm("삭제하시겠습니까?");");

코드에서는 버튼의 attribute를 추가시킨 것을 볼 수 있습니다. 첫번째 인수는 onclick이라는 이벤트이고, 두번째 인수는 javascript의 confirm함수입니다.  아~ 그냥 클릭이라는 이벤트에 confirm함수를 연결 시켰나보다... 라고 넘어갈 수도 있지만,  잠시 더 생각해 보면,

<asp:Button id="Btn_Delete" runat="server" onClick="Btn_Delete_Click" />

이렇게 되어있다면, 어떻게 해석이 될까요? 이벤트가 중복선언 된 것일까요?
차이점은 위의것은 client-script이고, Btn_Delete_Click은 server-script임다....
웹 컨트롤이 서버에서 해석되면서, 웹 컨트롤과 서버 스크립은 각각 html,client-script으로 해석됩니다.

그렇다면, 먼저 쓰인(confirm(...)) 스크립과 해석되어진 스크립과의 차이점은 무엇일까요?
먼저 쓰인 것은 사용시 서버와의 라운드 트립을 발생시키지 않습니다. 후자의 경우 Btn_Delete_Click이라는 스크립은 원래 서버스크립이 분석되어 Client-Script이 된 것이기 때문에 반드시 서버와의 round-trip이 발생합니다. 즉, 해석된 코드를 소스보기에서 보면, submit();하는 부분이 항상 있습니다.  

이벤트 발생순서는 확인하는 창이 먼저 뜨고, Yes를 눌렀을 경우에 Btn_Delete_Click 함수가 실행되어 실제 데이터가 삭제됩니다. 사용자가 취소를 누른 경우에는 false가 리턴되어 Server-Script(Btn_Delete_Click)은 실행되지 않습니다.
Posted by 알이씨


요구사항 : 사용자가 웹에서 본 데이터를 특정 포멧에 맞추어 엑셀 파일로 저장
조건 : 사용자가 보는 데이터 포멧은 일정하다. 즉 데이터 개수만 다를 뿐 그 항목은 같다.
준비사항 : 엑셀 .COM 컴퍼넌트를 가져와야 함(즉 서버측에 엑셀이 일단 설치가 되어 있어야 함)

Visual Studio 2005 메뉴에서 다음 과정을 거침
Website - 참조 추가 - COM 탭으로 이동
Microsoft Excel x.x Object Library 선택

특정 파일을 읽어와서 수정 후 다른 이름으로 저장하는 소스
==============================================================================
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Excel = Microsoft.Office.Interop.Excel;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
        Excel.Application excelApp = new Excel.Application();
        excelApp.Visible = false;
        Excel.Workbook excelWorkbook = excelApp.Workbooks.Open("e:\\test.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing); // test.xls 파일을 열어서

        Excel.Sheets excelSheets = excelWorkbook.Worksheets;
        string currentSheet = "Sheet1";
        Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
        Excel.Range range;
        range = excelWorksheet.get_Range("A1", Type.Missing); // A1 위치에

        range.set_Value(Type.Missing, "요거이 테스트");  // 데이터를 삽입

        excelWorkbook.SaveAs("e:\\copy_test.xls", Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive,
Type.Missing, Type.Missing , Type.Missing, Type.Missing, Type.Missing); // 다른 이름으로 저장
        excelApp.Quit(); // 프로그램 종료
    }
}


Posted by 알이씨


단순 예제

int aa = 3;
str = String.Format("{0:000}", aa);

결과 : 003

UInt32 aa = 10;
string s = String.Format("{0:X3}", aa);

결과 00A

UInt32 aa = 10;
string s = String.Format("{0:x3}", aa);

결과 00a
Posted by 알이씨


MSDN을 검색하다 굉장히 유용(?) 할것 같은 예제가 있길래 퍼왔다.
출저는 발켰으니 괜찮겠지.. 친절하게 MSDN에 소스 복사하기까지 있으니까 ㅡㅡ;


// This code example demonstrates the String.Format() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
// Store the output of the String.Format method in a string.
    string s = "";

    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    s = String.Format(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);
    Console.WriteLine(s);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    s = String.Format(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal sortable: . . . {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);
    Console.WriteLine(s);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    s = String.Format(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);      
    Console.WriteLine(s);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal sortable: . . . Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

Posted by 알이씨


아래와 같이 char배열에서 string으로 string에서 char로 형변환 할 수 있다.
보너스는 char 배열 넘기기~ (복사해서 넘긴다. 주소를 넘기려면 ref를 사용)

string str = "12345";
char[] temp_str;
temp_str = str.ToCharArray(); //  string -> char []
Rcv_Char_arr(temp_str);

protected void Rcv_Char_arr(char[] arr)
{
    string str = new string(arr); // char[] -> string
}
Posted by 알이씨



목표

특정 이미지를 클릭하면 다른 이미지로 변경되고 다시 클릭하면 원래 이미지로 돌아오는 토글 형식의 이벤트를 구현, 단 해당 컨트롤은 서버쪽에서도 접근 가능해야 함


준비
이미지 컨트롤은 asp .net의 이미지 컨트롤을 사용하지 않고 html 컨트롤을 사용한다. 적당한 위치에 이미니 컨트롤을 추가

<span style="cursor:hand" onclick="return Test_Change_Img('Test_Img');">       
        <img src = "img/small-sphere-green.bmp" runat="server" alt="" id= "Test_Img" name = "Test_Img" style="border-width: 0" enableviewstate="false" /></span>

초기 이미지는 img 폴더의 small-sphere-green.bmp 로 설정하였다.


구현

함수를 호출하는 곳에서 해당 이미지의 이름을 함께 넘겨준다. 함수 구현부에서는 컨트롤 이름을 통해 이미지의 url을 알아내고 해당 url을 비교하여 토글링에 이용한다.

주의 : 이미지 src에는 full url이 들어가 있다 따라서 이미지 파일 이름만 얻어오기 위해 몇가지 string 관련 함수를 이용하였다.

function Test_Change_Img(){   
    var str = document[Test_Change_Img.arguments[0]].src;   
    var str_index = str.[각주:1]lastIndexOf("/");
    var img_src_str = str.[각주:2]slice(str_index+1, str.length);    
   
    if(img_src_str == "small-sphere-red.bmp"){
        document[Test_Change_Img.arguments[0]].src = "img/small-sphere-green.bmp";
    }else{
        document[Test_Change_Img.arguments[0]].src = "img/small-sphere-red.bmp";
    }   
}


비하인드 코드(*.cs)에서는 다음과 같이 이미지 컨트롤에 접근할 수 있다.

Test_Img.Src = "img/small-sphere-red.bmp";
  1. 매개변수 스트링이 나타나는 마지막 위치 인덱스 반환 [본문으로]
  2. 문자열의 특정 위치부터 특정 위치까지를 반환 [본문으로]
Posted by 알이씨


본 내용은 ASP .NET 2.0에 관련된 내용입니다.

1. 비컴파일 페이지 만들기
컴파일 할 필요가 없는 페이지에는 다음과 같은 코드를 삽입하여 컴파일러가 해당 페이지를 컴파일 하지 않게 하는 것이 좋다.

- 페이지 단위 적용
<%@ Page CompilationMode="Never" %>

- 어플리케이션 단위 적용
<configuration>
    <system.web>
        <pages compilationMode="Never" />
    </system.web>
</configuration>



2. 뷰 상태 사용 자제
PostBack을 하여도 상태 관리를 할 필요가 없는 서버 컨트롤들의 뷰 상태를 사용하지 않으면 네트워크 전송량을 줄여 성능 향상을 이룰 수 있다.

- 페이지 단위 적용
<%@ Page EnableViewState="false" %>

- 컨트롤 단위 적용
컨트롤 속성에서 EnableViewState 속성을 False로 변경


3. 서버 컨트롤 사용 자제
서버 컨트롤을 사용하지 않고 기본적인 HTML을 이용하여 구현할 수 있다면 서버측의 자원을 아낄 수가 있다.

예> 하이퍼링크

<a href  = "http://suemirr.airpoint.co.kr"> 알이의 블로그 </a>

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="http://suemirr.airpoint.co.kr> 알이의 블로그 </asp:HyperLink>

4. DB를 접근할 때는 상황에 맞게 DataSet과 DataReader를 사용한다.

- DataSet이 더 효율적인 경우
  . 여러 개의 데이터 소스로부터 가져온 데이터 테이블들을 다시 연관지어 재검색하는 경우
  . XML 웹 서비스를 사용하는 경우. DataSet 개체는 원격 클라이언트로 전달이 가능
  . 데이터 캐시에 데이터 소스로부터 가져온 데이터를 저장하여 성능 향상을 도모할 경우
  . 대량의 행 단위 처리가 필요한 경우(한 행을 처리 하는데 걸리는 시간때문에 계속 연결되어 있다면 성능이 저하됨)

- DataReader
  . 데이터 캐시에 저장할 필요가 없는 경우
  . 데이터 소스로부터 가져온 결과 집합이 너무 커서 메모리에 저장할 수 없는 경우,
  . 읽기전용인 상태로 빠르게 데이터에 접근해야 할 경우
Posted by 알이씨

티스토리 툴바