책을보고 공부를 하던중
ILDASM을 직접 실행해보고 싶어서 따라해봤지만.
도저히 찾을수가 없더라구요.

PATH를 등록해도. 계속 없다고 나오길래
해당폴더에 갔더니. 파일이 없더라구요.

그래서 다운을 받아보려고 했지만.
350MB정도인데. 다운로드시간이 40분....

ILDASM을 해보려고 삽질한지 한시간이 훌쩍 넘어서 시간은 1시가 넘어고.
'에잇! 안해!!' 하고 책을 덥고

혹시나 하는 마음에
시작 - 프로그램 을 뒤지는데.


IL 디스어셈블러....

책이. version 2003임을 감안해서 찾아봤어야 하는건데...
OTZ

실행해서 해보니. 잘 되더군요.(당연하겠지.....)


두둥.... ㅠㅠ
by 피요히코~ 2009. 4. 23. 23:43
일단
.NET의 가장 중요한 두가지 특징에 대해 살펴보면
1. 모든 .NET언어가 동일한 .NET 기능에 엑세스 한다는것
2. 다양한 언어로 작성된 코드가 밀접하게 상호 운용된다는 점


이런 기능을 지원하는 일등공신은 MSIL인데, .NET 컴파일러는 소스코드등을 통해 Windows PE가 아닌 MSIL을 생성한다

MSIL의 등장으로 .NET 응용프로그램은 표준적이고 공통적인 포맷으로 컴파일되므로
일관성있게 .NET 런타임 환경에서 운용된다.

.NET 응용프로그램을 컴파일하고 실행할때 어떤일이 발생할까?

1. .NET 언어를 사용해 소스코드를 작성
2. 소스코드는 컴파일되 EXE파일로 작성
3. .NET 컴파일러는 MSIL 코드와 메니페스트를 생성하고 이 정보를 EXE의 한부분으로 포함시킨다.
    .NET 컴파일러가 생성하는 EXE는 기타 EXE와 마찬가지로 표준 PE헤더를 포함하고 있다.
    (메니페스트는 .NET 바이너리의 내용과 런타임 요구사항에 대한 정보를 포함하고 있다.
     메니페스트는 .NET 바이너리 파일에 저장되는 정보를 언급한다. )
4. (가장중요한단계) 컴파일러가 산출물을 생성할 때 .NET 런타임에서 _CorExemail이라는 이름의 함수를 임포트 한다.
5. 사용자가 응용프로그램을 실행하면 운영체제는 PE파일과 관련된 DLL 파일들을 로드한다.
    이 DLL 중에는 _CorExeMail 함수가 정의되어 있는 mscoree.dll 파일들이 포함된다.
    이 파일은 모든 .NET PE 파일이 실행될때 로드된다.
6. 운영체제 로더는 PE내 진입점(entry point)으로 점프한다.(휘릭~) 모든 PE는 Windows에서 이런 프로세스에
   따라 진행된다.
7. 운영체제에서 MSIL 코드를 실행할 수 없기 때문에 진입점은 mscoree.dll의 _CorExeMail으로 점프하는
   루틴에 불과하다.
8. _CorExeMail 함수는 컴파일러에서 PE에 놓아 둔 MSIL코드를 실행한다.
9. MSIL코드는 직접 실행될수 없다.(실행가능한 형식이 아니므로. )
    따라서 CLR에서 JIT 컴파일러를 사용해 MSIL을 CPU전용 명령어로 컴파일한다.
    JIT 컴파일러에서 컴파일할 때 프로그램의 메서드로만 호출되며, 컴파일된 실해오드는 시스템에 임시로
    저장되고 소스코드가 별경될때만 재컴파일 된다.

출처 : INSIDE C#
by 피요히코~ 2009. 4. 22. 23:54
protected void btnExcel_Click(object sender, ImageClickEventArgs e)
{
ArrayList arrColumn = new ArrayList();
DataSet ds = null;
ds = getDBData
arrColumn.Add(CreateBoundColumn("code_title", "구분"));
arrColumn.Add(CreateBoundColumn("dlscnt", "제정"));
arrColumn.Add(CreateBoundColumn("dlrcnt", "개정"));
arrColumn.Add(CreateBoundColumn("dltotcnt", "Total"));
arrColumn.Add(CreateBoundColumn("lscnt", "제정"));
arrColumn.Add(CreateBoundColumn("lrcnt", "개정"));
arrColumn.Add(CreateBoundColumn("ltotcnt", "Total"));
arrColumn.Add(CreateBoundColumn("scnt", "제정"));
arrColumn.Add(CreateBoundColumn("rcnt", "개정"));
arrColumn.Add(CreateBoundColumn("totcnt", "Total
string fileName = "order" + DateTime.Now.ToString("yyyyMMdd") + ".xls";
SaveAsExcel(ds, arrColumn, "", fileName); } private void SaveAsExcel(DataSet dsResult, ArrayList columns, string subject, string fileName) { if (fileName.Equals(null) && fileName.Equals("")) fileName = DateTime.Now.ToString("yyyyMMdd") + ".xls"; System.Web.HttpContext.Current.Response.Buffer = true; DataGrid dgExcel = new DataGrid(); dgExcel.ShowHeader = true; dgExcel.Caption = subject; dgExcel.AutoGenerateColumns = false; foreach (object column in columns) dgExcel.Columns.Add((BoundColumn)column); dgExcel.HeaderStyle.BackColor = Color.FromName("powderblue"); dgExcel.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; dgExcel.HeaderStyle.Height = 25; dgExcel.HeaderStyle.Font.Bold = true; dgExcel.DataSource = dsResult; dgExcel.DataBind(); System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("euc-kr"); System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ";charset=euc-kr"); System.Web.HttpContext.Current.Response.ContentType = "application/unknown"; ////////////////////////////////////////////////////////// /// 한글이 깨지는 경우 web.config의 globalization을 euc-kr로 바꿔주세요. ////////////////////////////////////////////////////// System.Web.HttpContext.Current.Response.Write(""); dgExcel.EnableViewState = false; System.IO.StringWriter sWriter = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(sWriter); dgExcel.RenderControl(htmlWriter); System.Web.HttpContext.Current.Response.Write(sWriter.ToString()); System.Web.HttpContext.Current.Response.End(); dgExcel.Dispose(); } public BoundColumn CreateBoundColumn(string DataFieldValue, string HeaderTextValue) { // Create a BoundColumn. BoundColumn column = new BoundColumn(); // Set the properties of the BoundColumn. column.DataField = DataFieldValue; column.HeaderText = HeaderTextValue; return column; } public BoundColumn CreateBoundColumn(string DataFieldValue, string HeaderTextValue, string FormatValue, HorizontalAlign AlignValue) { // Create a BoundColumn using the overloaded CreateBoundColumn method. BoundColumn column = CreateBoundColumn(DataFieldValue, HeaderTextValue); // Set the properties of the BoundColumn. column.DataFormatString = FormatValue; column.ItemStyle.HorizontalAlign = AlignValue; return column; }
by 피요히코~ 2009. 4. 17. 14:40
GridView에서 특정 컬럼에 있는 값들을 인자로 해서 특정 스크립트를 호출해줄때.

RowDataBound이벤트에서
(e.Row.RowType == DataControlRowType.DataRow) 일때

e.Row.Attributes.Add("OnClick", "popView(this)");
e.Row.Attributes.Add("arg1", e.Row.Cells[1].Text);
e.Row.Attributes.Add("arg2", e.Row.Cells[8].Text);
e.Row.Attributes.Add("arg3", e.Row.Cells[9].Text);
e.Row.Attributes.Add("OnClick", "popView(this)");

이렇게 해주고.
(arg1에는 두번째컬럼의 Text값이, arg2에는 아홉번째 컬럼의 Text값이, arg3에는 열번째 컬럼의 Text값이 들어갑니다)
aspx쪽에서 스크립트에서
function popView(arg)
{
     var value1 = arg.arg1;
     var value2 = arg.arg2;
     var value3 = arg.arg3;
}

이렇게 사용하면 됩니다.

Repeater에서는 같은 방법을 사용할수 없어서(못해서.ㅠㅠ)

aspx페이지에서 직접
<ItemTemplate>
<tr style="height: 25px;" onclick="popView('<%# Eval("FILE_CODE")%>' )">
<td ....
</tr>
</ItemTemplate>

이런식으로 넣어줬습니다. 위에서 처럼 배열(?)처럼 넣지는 못했구요.
그냥 repeater의 datasource에서의 특정 컬럼값을 넣어줬지요...
(물론 이렇게 밖에 하는걸 못찾아서... ㅠㅠ)

요즘은 Gridview는 잘 안쓴다고 하던데..

전 아직도 이렇게 쓰네요. 으헝헝


by 피요히코~ 2009. 4. 7. 16:03

function getParameter(qs) {
          var value = '';
          var address = unescape(location.href);
          var param= (address.slice(address .indexOf('?') + 1, address .length)).split('&');

          for (var i = 0; i < param.length; i++) {
              var name = param[i].split('=')[0];

              if (name.toUpperCase() == qs.toUpperCase()) {
                  value = param[i].split('=')[1];
                  break;
              }
          }
          return value ;
}

빨간 부분이 핵심~

by 피요히코~ 2009. 4. 6. 16:42

잠깐 ASP.NET MVC에 대해 정리를 하고 넘어가볼께요.

ASP.NET MVC는 많은사람들이 알고 있는 MVC패턴을 논리적/ 물리적으로 확정적으로 적용한 모델! 이라고 합니다.

또한 MVC가 (저도 그랬지만) ASP.NET의 발전된 모습이 아니라 다른 형태의 ASP.NET일 뿐입니다.

MVC와 구별되게. ASP.NET은 Classic ASP.NET이라고 하더라구요.

MVC는 웹 응용프로그램을 3개의 컴포넌트 역할로 구분합니다.

Model - 비지니스 로직수행, 데이터/ 정보 그 자체를 의미  (ASP.NET에서의 DataSet같은 녀석)

 

View - 모델의 로직이 수행된 결과를 노출, 화면에 출력하는 역할을 담당(.aspx나 .ascx페이지)

 

Controller - 모델과 뷰 사이의 중재자, 사용자로부터 입력/ 조작등에 대한 처리를 담당(.aspx.cs)




ASP.NET Classic과 ASP.NET MVC의 차이를 봐볼께요. 

   Classic ASP.NET ASP.NET MVC 
 Request Model PostBack   REST
 Data Model  Code-Behind  MVC
 MVC Model  MVC 1  MVC 2
 View -> Controller  Yes  No

여기서 View -> Controller는 View에서 COntroller로으 접근가능성에 대한 이야기 입니다. 
MVC는 기본적으로 View에서 Controller로의 접근이 안됩니다.
(물론 가능은 한데. 그렇게 하면 굳이 MVC를 쓰는 이유가 없다고 하더라구요)
 
 Classic ASP.NET   ASP.NET MVC 
 Page Controller  컨트롤러  Front Controller
 각각의 페이지를 처리하는
 개별 컨트롤러
   모든 HTTP 요청을 저리하는
 하나의 컨트롤러
 높음  기반프레임워크 의존도  낮음
 높음  모듈간 결합도  낮음
 낮음  컨트롤러 복잡도  높음
 분산  비지니스 로직  통합
 빠르고 간편한 개발(상대적으로)  개발 타입  구조적이고 체계적인 개발
 리소스 요청  URL 요청의 의미  컨트롤러 선택

이것만 봐도. MVC가 Classic ASP.NET보다 무조건 좋지는 않다는걸 알수 있어요.
어떤것이든 그렇겠지만.

상황에 따라 맞는걸 쓰는게 제일 좋죠~

출처 : 서동진님의 ASP.NET MVC 강의(링크는 동진님 블로그로ㅋ)
by 피요히코~ 2009. 4. 5. 23:18

이제 사용해볼 DB를 추가해 볼께요.

APP_DATA에서 새항목 만들기 한후에


SQL server 데이터베이스를 기본 이름으로 만들께요
그리고. 테이블을 만듭니다.


간단하게
idx/ Name/ Content/ RegDate를 만들었구요.
idx는 기본키로. 테이블명은 디폴트로 했습니다.

이제 LINQ to SQL클래스를 Model 폴더에 추가합니다.


역시나 이름은 디폴트입니다.

이제 서버탐색기를 열어서 좀전에 추가한 테이블을 추가할께요.


그냥 사용할 테이블을 화면으로 끌어오면 끝!
(참 쉽죠잉~)

이렇게만 하면 알아서 이거저거 만들어 줍니다.
(그게 정확히 뭔지는 나중에  LINQ 강좌 듣고 다시.. -_-ㅋ)
(Model밑에 만들어놓은 DataClasses1밑에 파일두개를 보면 되요~)

자. 여기까지 해서. DB를 사용할 준비까지 됐네요.

출처 : 서동진님의 ASP.NET MVC 강의(링크는 동진님 블로그로ㅋ)
by 피요히코~ 2009. 4. 4. 15:00

새프로젝트 만들기를 해서.
ASP.NET MVC Web Application 을 선택하고
이름을 지어주고하면 기본적인 MVC 프로젝트를 만들수 있네요. (간단하구만요)


프로젝트 생성후의 솔루션탐색기 화면
MVC니 당연하겠지만.
Controllers/ Models/ Views 폴더가 있군요.


전 아무것도 한게 없는데 이런 화면을 만들어 주네요.
으허허.

출처 : 서동진님의 ASP.NET MVC 강의(링크는 동진님 블로그로ㅋ)
by 피요히코~ 2009. 4. 4. 14:29

 MVC를 다운받고 싶다면.

그리고 영어가 자신있다면..

http://www.asp.net/mvc/


by 피요히코~ 2009. 4. 4. 12:49

어처구니 없는 실수지만.
가끔 하는 실수..

STRING에서 메소드를 사용하려고 할때
(가령 SPLIT, TRIM, REMOVE..)

단순히 String.Trim() 을 한다고 해서 해당 string값이 변경되는게 아니다..
다시 그 string에 넣어줘야만 적용이 되는것이다... 라는..

아주 단순하고 쉬운건데
계속 헷깔려 하다가 결국 디버깅하다가 발견하곤 한다. -_-ㅋ

한심한 나...
ㅠ_-
by 피요히코~ 2009. 3. 9. 15:24