'C#'에 해당되는 글 3건

  1. 2009.08.19 HTML에서 특수 기호 인코딩의 필요성
  2. 2008.09.04 단일 프로세스 실행
  3. 2008.06.23 .Net Framework 3.5 Note

C#(ASP.NET)
2009. 08. 19.
안혁
http://hyok.kr



HTML 문서에서 특정 의미로 해석되는 ", <, >등의 문자들을 글 내용, 글 제목 등으로 그대로 출력 시 예측하지 못한 돌발 상황에 빠지게 됩니다.
 
예를 들어,
[code]
<input value="테스트 내용" />
[/code]
이렇게 HTML 문서가 만들어질 것이라고 예상하고 코드를 작성하였는데, value 값에 "문자가 들어가서
[code]
<input value="누가 " 이런 글자를 입력해삼?" />
[/code]
이런 HTML이 되어버려 화면에 '누가'만 나와버리는 상황이 그에 해당되겠습니다.
 
이 때, 개발자가 저런 특수문자를 입력 못하게 할 수도 있겠지만...
잘 생각해보십시오. 지금도 그 특수문자라는 것을 당신은 보고 이 글을 이해하고 있지 않습니까?
보여줄 방법이 있겠군요.
막아버리면 이모티콘조차 사용할 수 없는 황량한 프로그랭이 될겁니다. ( '');;;;
 
 
이상한 문자 입력하는 것. 다 받아 주십시오.
그럼 저장할 때 뭔가 좀 해볼까요?
그런 것, 하지 마세요. 나중에 검색할 때 방해됩니다.
그냥 저장합니다.
 
그럼, 출력할 때 무언가 하는 것이겠군요.
그렇습니다.
비하인드 코드에서 문자열을 대입할 때 다음 함수를 사용하여 문자열을 인코딩합니다.
 
[code]
string encodedStr = HttpUtility.HtmlEncode(orignalStr);
 [/code]
 
혹시 이런 질문을 하는 사람이 있을지 모르겠습니다.
디코딩은 언제하나요?
안해도 됩니다. 브라우저가 해줄겁니다.
 

추신)
'문자는 인코딩 되지 않습니다. '문자로 문자열을 묶어 다음과 같은 상황이 발생하지 않도록 주의하세요.
[code]
<input value='누가 ' 이런 글자를 입력해삼?' />
[/code]
값을 넣을 때, "문자로 묶는 습관을 가지기시 바랍니다.

'.Net' 카테고리의 다른 글

CryptographicException: Event code 3005  (0) 2009.10.30
HTML에서 특수 기호 인코딩의 필요성  (0) 2009.08.19
단일 프로세스 실행  (0) 2008.09.04
Posted by 안혁 windfruit
TAG C#
2008.09.04 13:41

C#
2008. 9. 4.
안혁
http://hyok.kr


참고자료:
   http://shinbinet.zc.bz/bbs/view.php?id=ccc&no=11
   http://forum.xda-developers.com/archive/index.php/t-361997.html


기본적으로 하나의 프로그램을 개속 실행하면 실행한 만큼 프로세스가 생기지만, 특별한 경우, 한 개만 실행되고 다시 실행시킬 경우 이미 실행되어 있는 프로그램이 활성화 되었으면 하는 때도 있습니다.
아쉽게도 C#에는 윈도우 활성화(최소화 되있거나 다른 윈도우에 가려졌거나 했을 때 눈에 보여지도록 하는 것을 말함)를 시켜주는 함수가 존재하지 않습니다. 그래서 WinAPI를 사용하여 이 부분을 해결합니다.

 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

[System.Runtime.InteropServices.DllImport("coredll.dll")]

public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

[System.Runtime.InteropServices.DllImport("coredll.dll")]

public static extern void BringWindowToTop(IntPtr hWnd);

[System.Runtime.InteropServices.DllImport("coredll.dll")]

public static extern void SetForegroundWindow(IntPtr hWnd);

[System.Runtime.InteropServices.DllImport("coredll.dll")]

public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);

 

/// <summary>

/// 해당 응용 프로그램의 주 진입점입니다.

/// </summary>

[MTAThread]

static void Main()

{

    string rt = "HyokMain"; //실행파일의 Caption

 

    // 최상위화면으로

    IntPtr wHandle = FindWindow(null, rt);

    if (wHandle != IntPtr.Zero)

    {

        ShowWindow(wHandle, 5);

        BringWindowToTop(wHandle);

        SetForegroundWindow(wHandle);

    }

    else

    {

        Application.Run(new HyokAppMain());

    }

}


윈도우 어플리케이션을 생성하면 program.cs라는 파일이 생기고, 그 안에서 Main 함수가 있는 클래스를 발견할 수 있습니다. 1~8줄이 WinAPI 함수를 Import하는 부분이다. coredll.dll을 Import하는데, 이는 .Net Compact Framework를 대상으로 할 때 사용하는 dll입니다. 일반 윈도우에서 동일한 기능을 구현하고자 한다면 coredll.dll 대신 user32.dll을 기입하면 되며, 19~20줄에서 프로그램 실행 여부를 확인 후 활성화(22~24줄) 또는 실행(28줄)하게 됩니다.

'.Net' 카테고리의 다른 글

CryptographicException: Event code 3005  (0) 2009.10.30
HTML에서 특수 기호 인코딩의 필요성  (0) 2009.08.19
단일 프로세스 실행  (0) 2008.09.04
Posted by 안혁 windfruit
TAG C#
.Net Framework 3.5
Visual Studio 2008
2008. 6. 23.
안혁
http://hyok.kr


A.     코드 조각 사용

       i.         Ctrl + k, x

      ii.         Visual C# 선택

사용자 삽입 이미지

     iii.         코드 조각 선택

사용자 삽입 이미지

     iv.         TAB 키를 사용하여 수정

사용자 삽입 이미지

      v.         코드 조각 이름을 직접 입력 후 TAB 키를 눌러도 동일한 기능 작동

B.     Auto Property

       i.         프로퍼티가 단순히 값을 넣고 가져오는 작업만 하도록 하는 기능을 다음과 같이 정의

public string Name { get; set; }

public int Age { get; set; }

Ø  get, set을 정의하지 않음

      ii.         컴파일 시 각각에 연결될 변수가 자동으로 생성 à private 변수 필요 없음

     iii.         사용 예

Customer obj = new Customer() { Name = "홍길동", Age = 10 };

Ø  Customer 클래스의 프로퍼티를 위와 같이 초기화

C.     확장 메소드

static class MyClass

{

    // staticthis를 사용하여 Extension Method를 구성

    // this 다음에 나오는 타입(string)를 대상으로 확장

    // 인자를 받고 싶다면 그 다음에 넣으면 됨(int num)

    // 다음은 string 타입에 Greeting 멤버 함수를 추가

    public static string Greeting(this string str, int num)

    {

        return str + "안녕하세요" + num.ToString();

    }


    // 다음은 string 타입에 인자가 없는 IsEmailCheck 멤버 함수를 추가

    // string 변수가 가지고 있는 값이 Email 주소인지를 체크

    public static bool IsEmailCheck(this string str)

    {

        Regex reg = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");

        return reg.IsMatch(str);

    }

}


// string 타입에 추가된 멤버 함수는 다음과 같이 사용할 수 있음

private void button1_Click(object sender, EventArgs e)

{

    string str = "홍길동";

    MessageBox.Show(str.Greeting(123));

}


private void button2_Click(object sender, EventArgs e)

{

    string str = textBox1.Text;

    if (str.IsEmailCheck())

MessageBox.Show("OK");

    else

MessageBox.Show("Error");

}

D.     익명 타입

       i.         var

      ii.         자바 스크립트와는 달리 타입이 한 번 정하여지면 변경할 수 없음

     iii.         Lamda Expression의 기반 기술로 사용 됨

E.      Lamda Expression

       i.         LINQ의 기반 기술

      ii.         익명 타입을 사용

Private void button2_Click(object sender, EventArgs e)

{

    List<Customer> myCustomer = GetCustomerList();

    //c는 익명 타입

    //myCustomer의 값 중 하나가 c에 대입하여 이를 사용

    IEnumerable<Customer> ie = myCustomer.Where(c => c.City == "서울");

    //위를 다음과 같이 익명 함수를 사용하여 작성할 수 있음

    //IEnumerable<Customer> ie = myCustomer.Where(

    //    delegate(Customer c)

    //    {

    //        return (c.City == "서울" ? true : false);

    //    }

    //);


    foreach (Customer cs in ie)

    {

        MessageBox.Show(cs.Name);

    }

}


private void button3_Click(object sender, EventArgs e)

{

    List<Customer> myCustomer = GetCustomerList();

    double avg = myCustomer.Average(c => c.Age);

    //위와 동일한 코드

    //double avg = myCustomer.Average(

    //    delegate(Customer c)

    //    {

    //        return c.Age;

    //    }

    //);

    MessageBox.Show(avg.ToString());

}


private List<Customer> GetCustomerList()

{

    List<Customer> myCustomer = new List<Customer>();

    myCustomer.Add(new Customer() { Name = "홍길동", Age = 10, City = "서울" });

    myCustomer.Add(new Customer() { Name = "김길덩", Age = 20, City = "부산" });

    myCustomer.Add(new Customer() { Name = "안길둥", Age = 30, City = "대구" });

    myCustomer.Add(new Customer() { Name = "원갈동", Age = 40, City = "광주" });

    myCustomer.Add(new Customer() { Name = "문걸동", Age = 50, City = "서울" });

    myCustomer.Add(new Customer() { Name = "조골동", Age = 60, City = "서울" });

    return myCustomer;

}

F.      LINQ

       i.         List<> 타입을 이용한 LINQ

private void button1_Click(object sender, EventArgs e)

{

    List<MyClass> product = new List<MyClass>();

    product.Add(new MyClass() { Product = "컴퓨터", Price = 1000, EA = 3 });

    product.Add(new MyClass() { Product = "마우스", Price = 4000, EA = 30 });

    product.Add(new MyClass() { Product = "키보드", Price = 100, EA = 10 });

    product.Add(new MyClass() { Product = "모니터", Price = 300, EA = 5 });

    product.Add(new MyClass() { Product = "CPU", Price = 10000, EA = 44 });

    product.Add(new MyClass() { Product = "메모리", Price = 5500, EA = 2 });

    product.Add(new MyClass() { Product = "HDD", Price = 700, EA = 93 });


    // 익명 타입 대신 IEnumerable<MyClass> 타입으로 받아도 됨

    var query = from p in product

                where p.Price > 1000 && p.EA > 10

                select p;


    //foreach (MyClass mc in query)

    //{

    //    MessageBox.Show(mc.Product);

    //}


    // query IEnumerable<MyClass> 타입이므로 ToList()하지 않아도 됨

    dataGridView1.DataSource = query //.ToList();

}

      ii.         SQL 2005을 이용한 Linq

1.      SQL Management Studio 설치

A.     Visual Studio 2008을 설치할 경우 SQL Server Express 버전이 설치됨

B.      추가적으로 SQL Server를 설치하지 않고 이를 활용 가능

C.      SQL Server Express 버전은 Management Studio를 별도로 설치하여야 함

D.     SQL Management Studio 설치

http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796

E.      설치된 Management Studio를 사용하여 SQL Server Express 버전 접속 시 다음을 유의

사용자 삽입 이미지

Ø  서버 이름 : localhost\sqlexpress

F.      SQL 2000 Sample DB 설치

http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en

Ø  설치 폴더 - “C:\SQL Server 2000 Sample Databases”NORTHWND/PUBSManagement Studio에서 추가

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

Ø  두 파일에 대하여 진행할 것

2.      Visual Studio 프로젝트 생성

A.     새 웹 프로젝트 생성

B.      새 항목: LINQ To SQL 추가

C.      데이터베이스 연결 추가

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

                                  i.         서버: localhost\sqlexpress ß Express 버전은 이런 방식으로 접근

Ø  정확히 입력하여야 데이터베이스를 선택할 수 있음

                                 ii.         데이터베이스: Northwind

D.     테이블 Drag&Drop: Orders

사용자 삽입 이미지

E.      컨트롤 추가

                                  i.         TextBox

                                 ii.         Button

                                iii.         GridView

                                iv.         LinqDataSource

사용자 삽입 이미지

F.      LinqDataSource 설정

사용자 삽입 이미지

사용자 삽입 이미지

Ø  DataContext 개체는 컴파일 후에 보일 것임

사용자 삽입 이미지

Ø  컬럼 선택 후 ‘Where’ 버튼 선택

사용자 삽입 이미지

Ø  추가 버튼 클릭 시 미리 보기에 추가 됨

G.     DataBinding

Ø  버튼 Click 이벤트에 다음 코드 추가

protected void Button1_Click(object sender, EventArgs e)

{

    GridView1.DataSource = LinqDataSource1;

    GridView1.DataBind();

}

H.     실행하여 버튼을 클릭하면 다음의 형태로 결과를 가져옴

사용자 삽입 이미지

'.Net > Visual Studio 2008' 카테고리의 다른 글

Visual Studio 2008 SP1 출시  (0) 2008.08.13
Linq to DataSet  (0) 2008.08.12
.Net Framework 3.5 Note  (0) 2008.06.23
Visual Studio 2008 출시 + WPF, Silverlight, AJAX ASP.NET 공식 사이트  (0) 2007.12.03
Posted by 안혁 windfruit
이전버튼 1 이전버튼