'2017/08'에 해당되는 글 5건

Programming/.NET

System.Data.SqlClient.SqlDataReader는 쿼리의 결과를 데이터베이스에서 한행씩 읽어들이는 역활을 수행합니다.

 

SqlCommand sc = new SqlCommand("Select * From member");
SqlDataReader reader = sc.ExecuteReader();

while (reader.Read()) {
    string name = reader.GetString(0);
    int age = reader.GetInt32(1);
}

reader.Close();

 

대부분의 경우 while문을 통해 반복문을 수행하면서 결과를 읽으며 Read메서드가 false이면 끝을 의미합니다. SqlDataReader는 실제 결과데이터를 가지고 있지 않으며 결과테이블에서 다음에 가져와야할 행의 값만을 가지고 있습니다. 따라서 데이터베이스에 계속 연결된 상태여야 정상적으로 결과값을 가져올 수 있습니다.

 

각 컬럼(Column)의 값을 가져올때는 0부터 컬럼순에 따른 숫자를 사용하며 이때 GetString이나 GetInt32처럼 적절한 데이터형으로 읽어들이도록 합니다.

'Programming > .NET' 카테고리의 다른 글

[ASP.NET MVC] 유효성 확인 - 2  (0) 2017.09.20
[ASP.NET MVC] 유효성 확인 - 1  (0) 2017.09.15
[C#] SqlDataReader  (0) 2017.08.30
[C#] String  (0) 2017.08.22
[C#] 확장 메서드(Extension Method) - 2  (0) 2017.08.16
[C#] ?? 연산자  (0) 2017.08.10
0 0
Programming/.NET

System.String 클래스는 대부분의 문자열관련 처리에 이용됩니다.

 

이 클래스에서 자주 사용되는 메서드는 문자열 포함여부를 확인하는 Contains나 문자열을 치환하는 Replace같은 메서드를 사용할 수 있습니다. 이들 메서드 중에서 특징되는 몇몇 메서드를 살펴보겠습니다.

 

Trim()메서드는 문자열의 공백을 제거하는데 자주 사용되지만

 

string s = " abc ";
Console.WriteLine(s.Trim());

 

특정 문자를 지정하면 해당 문자를 삭제한 결과를 반환합니다.

 

string s = "abc";
Console.WriteLine(s.Trim('a'));

 

문자열을 비교할때는 == 연산자를 사용할 수 있지만 대소문자를 구분하며 이를 무시할 수 없습니다.

 

string a = "abc";
string b = "ABC";

if (a == b)
    Console.WriteLine("같다.");
else
    Console.WriteLine("틀리다.");

 

하지만 equal 메서드를 사용하면 대소문자구분 여부를 지정할 수 있습니다.

 

string a = "abc";
string b = "ABC";

if (a.Equals(b, StringComparison.OrdinalIgnoreCase))
    Console.WriteLine("같다.");
else
    Console.WriteLine("틀리다.");

 

Format 메서드는 중괄호로 표현된 숫자에 맞춰 문자열을 출력가는 기능을 수행합니다.

 

string name = "cliel";
string s = string.Format("hello : {0}", name);
Console.WriteLine(s);

 

위 예제에서 {0}은 name으로 지정된 내용으로 치환될 것입니다. 이런 형식의 출력은 인자수에 제한받지 않으며 원한다면 얼마든지 늘려나갈 수 있습니다.

 

string name = "cliel";
int age = 100;
string address = "korea, seoul";

string s = string.Format("hello : {0}\nYour age : {1}\nYour address : {2}", name, age, address);
Console.WriteLine(s);

 

다만 이때는 중괄호의 숫자는 인자값의 순서대로 맞추어 치환될 것입니다.

 

중괄호 숫자를 지정할때 ,[번호] 형식을 추가하면 해당 길이만큼 정렬공간을 확보하고 출력하게 됩니다. 예를 들어 {0,5}면 5칸의 공백을 확보하고 오른쪽 정렬을, {0,-10}이면 10칸의 공간을 확보하고 왼쪽정렬을 수행한뒤 내용을 출력합니다.

 

int i = 5;
int j = 2;

string s = string.Format("{0,-5} * {1,-5} = {2, 5}", i, j, (i + j));
Console.WriteLine(s);

 

또한 정렬이외에 :[타입] 형식으로 출력될 형식을 지정할 수도 있습니다.

 

int price = 1000;

string s = string.Format("판매가 : {0,10:C}원", price);
Console.WriteLine(s);

 

아래 표는 출력가능한 형식을 정리한 표입니다.

 

 

 형식

 설명

 숫자

 C

 통화형식

 D

 10진수

 E

 공학

 F

 고정 소수점

 G

 일반(기본값)

 N

 숫자 단위 구분

 P

 백분율

 R

 반올림 표시

 X

 16진수

 날짜

 d

 년-월-일

 D

 년월일요일 표시

 t

 오전/오후 시:분

 T

 오전/오후 시:분:초

 f

 년월일요일 오전/오후 시:분

 F

 년월일요일 오전/오후 시:분:초

 g

 년-월-일 오전/오후 시:분

 G

 년-월-일 오전/오후 시:분:초

 M

 월일

 Y

 년월

 

'Programming > .NET' 카테고리의 다른 글

[ASP.NET MVC] 유효성 확인 - 1  (0) 2017.09.15
[C#] SqlDataReader  (0) 2017.08.30
[C#] String  (0) 2017.08.22
[C#] 확장 메서드(Extension Method) - 2  (0) 2017.08.16
[C#] ?? 연산자  (0) 2017.08.10
[C#] 형변환(캐스팅 - Casting)  (0) 2017.08.01
0 0
Programming/.NET

[Programming/.NET] - [C#] 확장 메서드(Extension Method) - 1

 

위 글에서는 확장메서드를 직접 구현하고 해당 메서드를 호출하는 방법으로 확장메서드구현 방법에 대해 알아보았습니다. 하지만 기본적인 기능을 구현하는 경우라면 굳이 확장메서드를 일일이 직접 만들필요가 없습니다. 확장메서드를 기반으로 이미 C#에서는 마침표 표기법(Dot Notation)을 지원하고 있기 때문입니다.

 

var result = bb.Where(r => r.Size == 50);

 

위 예제는 마침표 표기법을 사용하고 있는 예시입니다. 이 메서드를 호출하고 난 뒤의 결과는 Filter메서드를 호출한것과 동일한 결과를 가져옵니다. 웬만한 처리작업은 LINQ 확장메서드로서 이미 IEnumerable에 구현되어 있는 것입니다.

 

아래는 자주 사용하는 확장메서드를 정리한 표입니다.

 

 All

 모든 데이터가 지정한 조건과 일치하는 true

 비지연

 Any

 데이터에서 지정한 조건과 하나이상 일치하면 true

 비지연

 Contains

 데이터에서 지정한 항목또는 값과 일치하는게 존재하면 true

 비지연

 Count

 데이터에 존재하는 항목의 갯수

 비지연

 First

 데이터의 첫번째 항목 반환

 비지연

 FirstOrDefault

 데이터의 첫번째 항목을 반환하되 데이터가 존재하지 않는다면 기본값을 대신 반환

 비지연

 Last

 데이터의 마지막 항목 반환

 비지연

 LastOrDefault

 데이터의 마지막 항목을 반환하되 데이터가 존재하지 않는다면 기본값을 대신 반환

 비지연

 Max

 데이터중 지정된 요소의 최대값을 반환

 비지연

 Min

 데이터중 지정된 요소의 최소값을 반환

 비지연

 OrderBy

 지정된 요소를 기준으로 Asc정렬

 지연

 OrderByDescending

 지정된 요소를 기준으로 Desc정렬

 지연

 Reverse

 데이터의 순서를 뒤집음

 지연

 Select

 가져올 데이터의 요소를 지정

 지연

 Single

 데이터중 첫번째 항목을 반환하되 항목이 하나이상 존재하면 예외발생

 비지연

 SingleOrDefault

 데이터중 첫번째 항목을 반환하되 항목이 하나이상 존재하면 예외를 발생시키고 하나도 없으면 기본값을 반환

 비지연

 Skip

 지정한 수만큼 항목을 건너뜀

 지연

 SkipWhile

 지정한 조건과 일치하면 해당 항목을 건너뜀

 지연

 Sum

 지정한 조건으로 합계를 구함

 비지연

 Take

 지정한 수만큼의 항목을 반환

 지연

 TakeWhile

 지정한 조건과 일치하는 수만큼의 항목을 반환

 지연

 ToArray

 데이터를 Array형태로 반환

 비지연

 ToDictionary

 데이터를 Dictionary형태로 반환

 비지연

 ToList

 데이터를 List형태로 반환

 비지연

 Where

 지정한 조건과 일치하는 항목을 반환

 지연

 

표에서 '지연'이라고 되어 있는 메서드는 처리과정에서 데이터가 완전히 열거되기 전까지는 실행되지 않음을 의미합니다.

 

예를 들어

 

var result = bb.OrderBy(r => r.Price).Take(1);

bb[1].Price = 100;

 

OrderBy와 Take메서드는 지연되는 메서드입니다. 이 메서드들을 조합해 호출하면 데이터가 모두 열거되기 전까지는 실행되지 않습니다. 그래서 bb[1].Price = 100; 으로 인해 두번째 Box의 값을 수정하면 이 구문의 실행이 결과에 그대로 반영되는 것입니다.

 

반면

 

int result = bb.Sum(r => r.Price);

bb[1].Price = 100;

 

'비지연'은 데이터의 열거상황과는 상관없이 메서드가 호출되는 즉시 실행될 것입니다. 그래서 합계를 구하는 Sum메소드가 호출되면 즉시 모든 Price값의 합계를 구하게 되고 뒤이어 오는 bb[1].Price = 100; 의 실행과는 전혀 무관한 결과를 보여주게 됩니다.

'Programming > .NET' 카테고리의 다른 글

[C#] SqlDataReader  (0) 2017.08.30
[C#] String  (0) 2017.08.22
[C#] 확장 메서드(Extension Method) - 2  (0) 2017.08.16
[C#] ?? 연산자  (0) 2017.08.10
[C#] 형변환(캐스팅 - Casting)  (0) 2017.08.01
[C#] 이벤트(event)  (0) 2017.07.26
0 0
Programming/.NET

null 조건을 처리할 수 있는 연산자로 ?? 가 있습니다.

 

예를 들어 아래와 같은 코드는

 

string s = null;

if (s == null)
    Console.WriteLine("NULL");

 

다음과 같이 수정될 수 있습니다.

 

string s = null;
Console.WriteLine(s ?? "NULL");

'Programming > .NET' 카테고리의 다른 글

[C#] String  (0) 2017.08.22
[C#] 확장 메서드(Extension Method) - 2  (0) 2017.08.16
[C#] ?? 연산자  (0) 2017.08.10
[C#] 형변환(캐스팅 - Casting)  (0) 2017.08.01
[C#] 이벤트(event)  (0) 2017.07.26
[C#] Directory 와 DirectoryInfo 클래스  (0) 2017.07.19
0 0
Programming/.NET

 1. 암시적 형변환(Implicit conversion)

 

short s = 100;
int i = s;

 

위 코드에서는 short형의 변수를 int형 변수에 대입하고 있습니다. int형 변수는 short타입의 변수보다 담을 수 있는 값의 범위가 더 크므로 이런 경우에는 전혀 문제되지 않고 정상적으로 형변환을 수행합니다. 이렇게 명시적이지 않고 자연스럽게 형변환이 이루어 지는 것을 암시적 형변환이라고 합니다.

 

 2. 명시적 형변환(Explicit conversion)

 

int i = 100;

short s = i;

 

int형 변수를 short형 변수에 대입하려고 시도하고 있습니다. short형 데이터타입은 int형 보다는 담을 수 있는 값의 범위가 더 작으므로 실제 위 코드를 컴파일하면 암시적 형변환을 수행할 수 없다는 오류를 내고 컴파일이 중단됩니다.

 

error CS0266: Cannot implicitly convert type 'int' to 'short'. An explicit conversion exists (are you missing a cast?)

 

이런경우에는 다음과 같이 형을 변환할 타입을 지정해 명시적 형변환을 수행해야 합니다.

 

int i = 100;
short s = (short)i;

 

하지만 명시적 형변환이라 하더라도 실제 형변환을 수행하고자 하는 대상에 비해 가지고 있는 값이 너무 큰 경우에는 오류를 발생시키게 됩니다. 위 예제가 정상적인 컴파일이 가능한 이유는 100이라는 값은 여전히 short형 변수에 담겨질 수 있는 크기의 값이기 때문입니다.

'Programming > .NET' 카테고리의 다른 글

[C#] 확장 메서드(Extension Method) - 2  (0) 2017.08.16
[C#] ?? 연산자  (0) 2017.08.10
[C#] 형변환(캐스팅 - Casting)  (0) 2017.08.01
[C#] 이벤트(event)  (0) 2017.07.26
[C#] Directory 와 DirectoryInfo 클래스  (0) 2017.07.19
[Visual Studio] Immediate Window  (0) 2017.07.12
0 0
1
블로그 이미지

클리엘