'asp.net'에 해당되는 글 18건

  1. 2011.01.06 C#, ASP.NET 웹서비스에서 DataTable 직렬화 문제
  2. 2010.11.22 ASP.NET Response 객체를 이용한 HTML 포맷없이 텍스트만 표현하기
  3. 2010.11.05 ASP.NET Connection Pool
  4. 2010.09.28 ASP.NET Ok, Cancel 메시지 박스 처리
  5. 2010.09.15 ASP.NET GirdView에서 줄바꿈 적용하기
  6. 2010.09.14 ASP.NET 자바스크립트를 이용한 FileUpload 확장자 검사
  7. 2010.08.16 ASP.NET GridView 데이터가 없을때 헤더 보이게 하기
2011.01.06 17:08

C#, ASP.NET 웹서비스에서 DataTable 직렬화 문제

.NET 프레임워크에서 웹서비스 사용에서 인터페이스로 DataTable을 사용하려다 보면 직렬화 문제가 발행한다.

오류 내용은 "DataTable을 직렬화할 수 없습니다. DataTable 이름이 설정되지 않았습니다."

말 그대로 DataTable 이름이 설정되지 않아 발생하는 문제이다.
해결 방법은 DataTable의 TableName 프로퍼티에 이름을 설정해주면 된다.

방법

DataTable tables = .......;
tables.TableName = "tableName"
Trackback 0 Comment 0
2010.11.22 17:00

ASP.NET Response 객체를 이용한 HTML 포맷없이 텍스트만 표현하기

ASP.NET의 Response 객체를 이용해 페이지 내용을 뿌려야 할 경우가 있다.
일반적으로 Response 객체의 Write 메소드를 이용해 내용을 담는데 그냥 담으면 페이지에는 정상적으로 보여지지만 소스를 보면 내용 이외에 다른 값이 포함되어 있는 것을 알 수 있다.
순수하게 Write 메소드를 이용해 넣은 값만 보여지길 원한다면 다음 코드를 이용하면 된다.

Response.Clear();
Response.Write("이것만 표현되요~");
Response.End();


[참조] ASP.NET Response.Write ()-  only the text without HTML formatting
Trackback 0 Comment 0
2010.11.05 11:08

ASP.NET Connection Pool

커넥션 풀링에 관해 알아보겠습니다.
원래 질답란에 있던 내용인데, 일반적이지 않은 내용이어서 정리를 해서 일반적인 사용법을 알려드리겠습니다.

커넥션 풀링은 DB와의 새 연결시 많은 자원을 소모하는 데, 직접연결을 피하고, 연결된 커넥션을 자원으로서 관리를 하여 성능향상을 얻고자 하는 방법입니다.

다시 설명하면, 
풀링매니저가, 연결된 커넥션을 자원으로 관리를 하면서, 어플리케이션에서 필요로 할 때 리소스가 많이 필요한 새연결을 하지 않고, 기존 자원으로 재사용을 하고, 연결 끊기문장을 만났을 때 DB와의 실제 연결을 끊지 않고, 풀링에 반납함으로써, DB와의 연결과 끊기를 실제적으로 줄여주는 효과가 있습니다.

1) 풀링의 생성
어플리케이션에는 한개이상의 커넥션 풀링이 존재할 수 있습니다. 이 각각의 커넥션 풀링은 특정한 connection string에 관계가 있습니다.
최초에 커넥션이 닫힐 때, 특정한 connection string을 가진 커넥션 풀이 생성됩니다. 그리고 연결은 실질적으로 끊지 않습니다. (풀을 사용하던 안하던 최초엔 풀에서 커넥션을 만들지 않음)

그후 새로운 커넥션이 생성이 될 때, connection string 이 기존 풀의 connection string과 다르면, 커넥션이 닫힐 때 새로운 pool이 생성됩니다. 이때 만약 똑같은 connection string 을 사용한다면 새로운 풀이 생성되지 않고 기존의 커넥션을 이용합니다.

이를 소스로서 예를 들어보면.
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();      
// Pool A 가 생성됨

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";
conn.Open();      
// Pool B 가 생성됨 (connection string이 다르다)

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();      
// Pool A의 자원을 이용한다. connection string 이 Pool A와 일치.

 

여기에선 모두 3개의 connection 객체가 생성되었지만, 2개의 connection pool이 생성되었다.풀이 일단 한번 생성되면, 프로세스가 종료할 때가지 사라지지 않고 지속된다. 비어있는 풀은 최소한의 오버헤드를 야기한다.

2) 커넥션관련 추가사항
커넥션은 한번 생성되면 minimum pool size가 충족될때까지 connection 이 풀링된다.
만약 sqlconnection이 요청되면, 풀에서 사용가능한 커넥션이 얻어진다. 만약 maximum pool size에 도달하여, 사용가능한 커넥션이 없다면 풀에서 자원이 반납될 때까지 기다린다. time-out 기간까지 얻어내지 못하면, 에러가 발생한다.

3) 주의사항
반드시 connection을 사용후에는 반납을 해야한다.
반납은 close() 나 dispose()를 통해 가능하다. nothing은 할 필요는 없다.
반납을 명시적으로 하지 않게 되면, 풀에 자원반납이 되지 않는다.

4) connection  pool관련 keyword
Pooling : 기본값 'true' : 이것을 false로 하면, 풀링이 사용되지 않는다. 즉 open()시 직접 DB를 열고, close()시 닫는다.
Max Pool Size : 기본값 100 : 최대 풀링사이즈
Min Pool Size : 기본값 0 : 최소 풀링사이즈 
Connection Lifetime : 기본값 0(초) : 이것은 풀내에서 커넥션들의 lifetime이다. 

5) 사용예
보통 커넥션 스트링에 
con.ConnectionString = "data source=xxx.xxx.xxx.xxx; initial catalog=nothwinds;user id=sa;password=" 

이렇게 쓰신다면, 풀링을 사용하시는 겁니다.왜냐하면, Pooling=true 가 디폴트 값이니까요..

con.ConnectionString = "data source=xxx.xxx.xxx.xxx; initial catalog=nothwinds;user id=sa;password=, Pooling='true''" 

이것과 같은 의미입니다. 또한 Max Pool Size 속성이 디폴트값이 100 이므로 
con.ConnectionString = "data source=xxx.xxx.xxx.xxx; initial catalog=nothwinds;user id=sa;password=, Pooling='true'', Max Pool Size=100" 
이것도 같은 의미입니다.

6) 기타
퍼포먼스 카운터를 이용하면, 현재 풀의 사이즈를 실시간으로 조사할 수 있습니다.
퍼포먼스 카운터는 관리도구-> 성능 탭으로 이용합니다.

그중에서 ".NET CLR Data" performance object 를 선택하여서 보면 다음과 같은 항목을 확인 할 수 있습니다.

Counter Description
SqlClient: Current # of pooled and non pooled connections Current number of connections, pooled or not.
SqlClient: Current # pooled connections Current number of connections in all pools associated with the process.
SqlClient: Current # connection pools Current number of pools associated with the process.
SqlClient: Peak # pooled connections The highest number of connections in all pools since the process started. Note: this counter is only available when associated with a specific process instance. The _Global instance will always return 0.
SqlClient: Total # failed connects The total number of connection open attempts that have failed for any reason.

[출처] 데브피아/개발자가 알아두면 좋은 ASP.NET 지식 (connection pool)
Trackback 0 Comment 0
2010.09.28 19:15

ASP.NET Ok, Cancel 메시지 박스 처리

1. 우선 이벤트를 등록할 버튼을 생성한다.
<asp:Button ID="btnDelete" runat="server" Text="삭제" />


2. 버튼에 OnClientClick 속성에 confirm 자바스크립트를 등록한다.
<asp:Button ID="btnDelete" runat="server" Text="삭제"
  OnClientClick="return confirm('정말 삭제하시겠습니까?');" />


3. 버튼에 onclick 이벤트를 등록한다. (VS 디자인 모드에서 더블클릭)
<asp:Button ID="btnDelete" runat="server" Text="삭제"
  OnClientClick="return confirm('정말 삭제하시겠습니까?');"
  onclick="btnDelete_Click" />


4. onclick 이벤트에 원하는 동작을 작성한다. (.aspx.cs 파일)
string script = "<script>alert('확인을 클릭하셨네요!!');</script>";
Page.ClientScript.RegisterClientScriptBlock(typeof(string), "confirm", script);


[참조] ASP.Net JavaScript 2-button (OK/Cancel) "msgbox"
Trackback 0 Comment 0
2010.09.15 16:33

ASP.NET GirdView에서 줄바꿈 적용하기

GirdView에서 줄바꿈(newline)을 적용하기 위해 Envirnment.NewLine을 적용하기 먹히지 않았다. 그래서 구글링을 한 결과 해답은~

1. GridView 필드의 "HtmlEncode" 속성을 "false"로 변경
2. Envirnment.NewLine 대신에 "<br>"태그를 사용

참 쉽죠잉~


[출처] New Line in a gridview cell
Trackback 0 Comment 0
2010.09.14 11:31

ASP.NET 자바스크립트를 이용한 FileUpload 확장자 검사

자바스크립트
function checkFileExtension(elem) {
    var filePath = elem.value;

    if(filePath.indexOf('.') == -1)
        return false;
        
    var validExtensions = new Array();
    var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
    
    validExtensions[0] = 'jpg';
    validExtensions[1] = 'jpeg';
    validExtensions[2] = 'bmp';
    validExtensions[3] = 'png';
    validExtensions[4] = 'gif';  
    validExtensions[5] = 'tif';  
    validExtensions[6] = 'tiff';
    validExtensions[7] = 'txt';
    validExtensions[8] = 'doc';
    validExtensions[9] = 'xls';
    validExtensions[10] = 'pdf';
    
    for(var i = 0; i < validExtensions.length; i++) {
        if(ext == validExtensions[i])
            return true;
    }

    alert('The file extension ' + ext.toUpperCase() + ' is not allowed!');
    return false;
}

 

ASP.NET의 Page_Load에 다음 코드 추가

FileUpload1.Attributes.Add("onchange", "return checkFileExtension(this);");


[참조]
How to filter files in file upload HTML control
 
Trackback 0 Comment 0
2010.08.16 20:52

ASP.NET GridView 데이터가 없을때 헤더 보이게 하기

GridView는 DataGrid와 다르게 바인드 시 데이터가 없으면 헤더가 보이지 않는다. 이를 해결하기 위해서는 빈 행을 삽입하고 빈 행을 보이지 않도록 하면 된다.

GridView gridView = .....;
DataTable bindData = GetBindData();

//바인드할 데이터가 있을 경우
if(bindData.Rows.Count != 0)
{
    gridView.DataSource = bindData;
    gridView.DataBind();
}
//바인드할 데이터가 없을 경우
else
{
    //바인할 테이블에 빈 행을 삽입한다.
    bindData.Rows.Add(bindData.NewRow());
    
    gridView.DataSource = bindData;
    gridView.DataBind();

    //빈행을 보이지 않도록 한다.
    gridView.Rows[0].Visible = false;
}
Trackback 0 Comment 0