'Application/C#'에 해당되는 글 28건
- 2009.11.09 C# 초보자분들을 위한 기초강좌
- 2009.11.09 C# 코딩연습
- 2009.07.09 C# ORA-12154: TNS:서비스명를 해석할 수 없습니다 5
- 2009.07.07 C# SqlHelper 사용하기
- 2009.06.24 C# CodeFx All-In-One Code Framework Examples
- 2009.06.24 MSDN C# 프로그래밍 가이드
- 2009.06.18 C#에서는 기본 매개 변수 값을 지정할수 없다!
- 2009.06.17 c# binary to Hex, String to Byte
- 2009.06.09 ADO.NET의 정리 DataSet, Data Mapping, DataView의 기본 개념
- 2009.06.09 [C# DB-DataSet] DataAdapter를 이용해서 DataSet 생성하기
코딩연습
C#에 관해서 매우 좋은 자료가 있으니 꼭 읽어 보기 바람~~~~~~ 읽고 나도 뭔가 느끼는게 있다면 적어야지
>.,<
이런.. ㅅㅂ
ORA-12154: TNS:서비스명를 해석할 수 없습니다
C#에서 오라클 연결시 이런 메시지를 자꾸 토해낸다…
TOAD 접속된다 SQLPLUS 접속 된다..
근데 왜 안되지 ㅅㅄㅄㅂ 하루 걸렸다
내가 삽질하다가 회사 선임님한테 도움을 요청했다 GG까지 갈뻔했다….
근데 왠걸 이런 오라클이놈이 폴더구조가 () 괄호가 있으면 안되는거였다………….
폴더 구조가..
2009DB(1) 이런식이였는데 내 폴더 구조에 오라클 니가 왜 딴지냐고!!!!!!!!!!!
주거 주거 죽어버려 오라클따위 죽어버려 ㅠ.ㅠ
JAVA에는 common-dbutils 라는 놈이 DB관련 해서 아주 유용한놈이죠?
C#에서는 SqlHelper 라는 놈이 있습니다.
아래 싸이트 가시면 자세 한 정보를 더 보실수 있습니다.
sqlhelper Msdn
http://msdn.microsoft.com/ko-kr/library/ms954827.aspx
sqlhelper download 주소
TAEYO.NET
아래 가시면 자세한 설명 및 사용법에 대해서도 나옵니다. 영어가 힘드신분들 저를 포함한 ㅋㅋ
http://cfx.codeplex.com/Wiki/View.aspx?title=All-In-One%20Code%20Framework%20Examples
VS2008, VS2010 버전으로 되있음.. 하하하하하하하하 흠..
Examples for COM
Examples for Data Access
Examples for Office
Examples for Language
Examples for Library
Examples for IPC and RPC
Examples for Windows
Examples for WinForm
Examples for WPF
Examples for XML
Examples for File System
Examples for Security
Examples for Hook
Examples for Console
Examples for Diagnostics
class CAL
{
public CAL(int a = 10)
{
// TODO
}
}
public CAL(int a = 10) 문법이 허용되지 않내욤 ㅡㅡ;;
흠.. 이것도 삽질인가 ㅎㅎ
함수(메소드) 오버라이딩 해서 쓰래요!
쩝쩝 나름 좋은 기능인데 ㅋㅋ
출처 : 네이버 지식 선생뉨
class MainApp
{
static void Main(string[] args)
{
byte[] bin_data = ToBytes("Hello"); // 임의로 byte[]을 얻기 위한 부분, 실제 파일에서 읽어들인 byte[]형 값으로 대체하면 됩니다.
Console.WriteLine(ToHex(bin_data));
}
// byte[] 형을 hex 값의 문자열로 출력한다.
static public string ToHex(byte[] bin_data)
{
string result = "";
foreach (byte ch in bin_data)
{
result += string.Format("{0:x2} ", ch); // 2자리의 16진수로 출력, [참고] 링크 읽어볼 것
}
return result;
}
// 문자열을 byte[] 형으로 전환해준다. 테스트를 위해 임의의 byte[]형 데이터를 얻기 위한 메소드
static public byte[] ToBytes(string arg)
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
return encoding.GetBytes(arg);
}
}
1.Table Mapping
ADO.NET에서는 DataTableMapping 과 DataColumnMapping 객체를 사용해서 데이터베이스에서 가져온 데이터의 컬럼명과 그것을 담아둘 DataSet의 컬럼명을 서로 매핑하는 방법을 사용할 수 있다.
이는 나중에 다시 한번 다루게 되겠지만 불분명한 컬럼명이나 짧은 컬럼명을 갖는 테이블을 관리할 때 유용하게 사용할 수 있는데 Table Mapping을 여러분이 직접 코드 상에서 관리할 수도 있지만 DataAdapter에서 TableMapping 속성을 통해서 편리하게 매핑작업을 수행 할 수 있도록 지원해주고 있다.
왼쪽 화면과 같이 테이블 매핑창을 사용해서 원본 데이터와 데이터 셋의 컬럼명을 설정할 수 있게 되어 있다.
이때 DataSet도 역시 기존에 생성되어 있는 것이 있으면 그걸 선택해서 매핑할 수 있게 되어 있는데 그렇게 하기위해서는 위에 있는 테이블 및 열 이름을 지정할 때 데이터 집합을 사용합니다. 체크 박스에 체크를 하시면 DataSet을 선택할 수 있다.
테이블 매핑은 웹 서비스등에서 적극적으로 활용할 수 있으며 이 작업을 마치고 나서 소스를 확인해 보면 관련 코드가 자동으로 생성되어 있는 것을 볼 수 있다.
2.DataSet
다시 DataSet이 나왔다. 사실 ADO.NET은 DataSet만 잘 사용해도 굉장히 작업이 용이하고 편리하다. 그만큼 대부분의 작업에서 DataSet을 사용하고 있으며 활용도가 높은 객체이다.
DataSet 객체를 생성하는 방법도 역시 이전과 크게 다르지 않다.
여기서 중요한 개념을 가지고 가야 하는데 DataSet은 두 가지 형태로 사용할 수 있다는 점이다.
- Typed DataSet
스키마 정보를 클래스 정의에 포함시키는 DataSet 클래스의 기존 서브클래스에 기초한 개체를 생성한다. 말이 너무 어렵지 않은가? 다시 쉽게 데이터베이스의 테이블 정보를 가지고 있는 DataSet. 이게 좀더 쉽겠다.
- UnTyped DataSet
일반적으로 그냥 DataSet을 사용하면 형식화되지 않은 DataSet이 나온다.
Typed DataSet 에 비해서 약간의 속도저하가 있으나 유연하기 때문에 많이 사용하는 방식이다.
일반적으로 Typed DataSet을 사용하는 이유는 이미 DataSet내부에 스키마 정보를 이미 가지고 있기 때문에 데이터베이스상에서 쿼리를 최적화 하는 과정에 많은 속도상의 잇점을 얻게 된다.
또 하나 데이터베이스의 스키마 정보가 모두 객체화 되어 있기 때문에 코딩과정에서 오류를 일으킬 확률이 현저하게 떨어진다.
또 설사 오류를 일으킨다 해도 디버깅 작업이 아주 간편하기 때문에 Typed DataSet을 선호하는 개발자들이 상당수 있다.
DataSet을 폼에 추가하면 아래와 같이 두 가지 선택을 할 수 있게 나온다.
첫 번째가 Typed DataSet이고 두 번째가 Untyped DataSet이다.
Untyped DataSet의 경우는 별다른 설정을 해줄 필요가 없기 때문에 바로 새로운 DataSet 추가 되고 작업이 종료된다.
형식화된 DataSet을 사용하기 위해서는 먼저 데이터베이스 또는 기타 형태의 테이블 스키마 정보가 미리 제공되어 있어야 한다.
대부분의 경우는 아래와 같이 솔루션 창에서 추가 -> 새 항목 추가를 선택한 다음에
데이터 집합을 선택해서 추가하는 방법을 사용한다.
이렇게 새로운 데이터 집합을 추가하고 나면 XXX.xsd 파일이 생성되게 되는데 이 파일을 열어보면 이 파일 역시 하나의 XML파일이라는 걸 알 수 있다.
눈을 씻고 봐도 스키마 정보가 보이지 않는다.
여기에 우리는 스키마 정보를 입력해 두어야 이를 바탕으로 Typed DataSet이 동작하게 된다. 데이터베이스 스키마 정보를 입력하는 방법 역시 마우스질(?)만으로 해결 된다.
좌측 그림과 같이 서버 탐색기에서 우리가 사용하자 하는 테이블을 잡아서 XSD파일 위로 끌어다 놓기만 하면 여기에 관련된 스키마가 자동으로 설정되는 것을 볼 수 있다.
이제 XSD파일을 확장해 보면 아래와 같이 XXX.cs 파일이 추가되어 있는 것을 볼 수 있다.
이 클래스 파일을 열어보면 DataSet에서 상속받은 새로운 클래스가 소스차원에서 정의되어 있는 것을 발견할 수 있는데 이 클래스가 바로 Typed DataSet이다. 다시 말해서 Typed DataSet의 부모는 Untyped DataSet이고 여기에 스키마정보를 XML로 정의해서 이를 객체화 시킨 것이 바로 Typed DataSet라고 할 수 있다.
DataSet안에는 하나 이상의 테이블을 추가할 수 있으며 추가된 테이블들이 서로 관계를 설정할 수 있다.
이렇게 관계를 설정하는데 있어서 아래에 보면 몇 가지 조건이 존재하는 것이 보이는데 업데이트 규칙, 삭제 규칙, 적용/취소 규칙 등이 있다.
규칙은 모두 네 가지 중 하나를 적용할 수 있으며 아래와 같다.
- (기본값): 기본값으로 설정된 값으로 설정된다.
- None: 관련된 행에 어떤 동작도 일어나지 않는다.
- Casecade: 관련된 모든 행에 단계적으로 업데이트/삭제를 한다.
- SetNull: 관련된 모든 행이 업데이트 동작의 결과로 DBNull로 설정된다.
- SetDefault: 업데이트에 영향을 받은 모든 행은 DefaultValue에 의해서 설정된 값을 가지게 된다.
Typed DataSet을 사용하는 방법은 Untyped DataSet과 동일한 부분도 있고 더 편리한 부분도 있다. 동일한 부분은 DataAdapter를 이용해서 DataSet을 채우는 부분이고 더 편리한 부분은 데이터에 접근하는 방법이다.
3.DataView
마지막으로 살펴볼 객체는 바로 DataView이다.
DataView 객체는 데이터를 필터링 하고 정렬할 수 있는 기능을 제공해 준다. 특히 하나의 데이터목록에서 여러 개의 조건에 따라 각각 다른 목록을 출력한다든지 할 때 아주 유용하게 사용할 수 있다.
먼저 DataView의 멤버를 살펴보기로 한다.
.NET Compact Framework에서 지원
삭제가 허용되는지 여부를 나타내는 값을 설정하거나 가져옵니다.
.NET Compact Framework에서 지원
편집이 허용되는지 여부를 나타내는 값을 가져오거나 설정합니다.
.NET Compact Framework에서 지원
AddNew 메서드를 사용하여 새 행을 추가할 수 있는지 여부를 나타내는 값을 가져오거나 설정합니다.
.NET Compact Framework에서 지원
기본 정렬을 사용할지 여부를 나타내는 값을 가져오거나 설정합니다.
Container(MarshalByValueComponent에서 상속)
구성 요소의 컨테이너를 가져옵니다.
.NET Compact Framework에서 지원
RowFilter 및 RowStateFilter를 적용한 다음 DataView의 레코드 수를 가져옵니다.
.NET Compact Framework에서 지원
이 뷰와 관련된DataViewManager를 가져옵니다.
DesignMode(MarshalByValueComponent에서 상속)
구성 요소가 현재 디자인 모드에 있는지 여부를 나타내는 값을 가져옵니다.
지정된 테이블에서 데이터 행을 가져옵니다.
C#에서 이 속성은 DataView 클래스에 대한 인덱서입니다.
.NET Compact Framework에서 지원
DataView에 표시할 행을 필터링하는 데 사용하는 식을 가져오거나 설정합니다.
.NET Compact Framework에서 지원
DataView에 사용되는 행 상태 필터를 가져오거나 설정합니다.
Site(MarshalByValueComponent에서 상속)
구성 요소의 사이트를 가져오거나 설정합니다.
.NET Compact Framework에서 지원
DataView에 대한 정렬 열과 정렬 순서를 가져오거나 설정합니다.
.NET Compact Framework에서 지원
소스 DataTable을 가져오거나 설정합니다.
Public 메서드
.NET Compact Framework에서 지원
새 행을 DataView에 추가합니다.
.NET Compact Framework에서 지원
폼에 사용되거나 다른 구성 요소에서 사용하는 DataView의 초기화를 시작합니다. 초기화는 런타임에 발생합니다.
.NET Compact Framework에서 지원
항목을 배열로 복사합니다. Web Form 인터페이스 전용입니다.
.NET Compact Framework에서 지원
지정된 인덱스의 행을 삭제합니다.
Dispose(MarshalByValueComponent에서 상속)
.NET Compact Framework에서 지원
오버로드되었습니다.MarshalByValueComponent에서 사용하는 리소스를 해제합니다.
.NET Compact Framework에서 지원
폼에 사용되거나 다른 구성 요소에서 사용하는 DataView의 초기화를 끝냅니다.초기화는 런타임에 발생합니다.
Equals(Object에서 상속)
.NET Compact Framework에서 지원
오버로드되었습니다. 두 개의 Object 인스턴스가 같은지 여부를 확인합니다.
.NET Compact Framework에서 지원
오버로드되었습니다. 지정된 정렬 키 값에 따라 DataView에서 행을 찾습니다.
.NET Compact Framework에서 지원
오버로드되었습니다. 열 값이 지정된 정렬 키 값과 일치하는 DataRowView 개체의 배열을 반환합니다.
.NET Compact Framework에서 지원
이 DataView에 대한 열거자를 가져옵니다.
GetHashCode(Object에서 상속)
.NET Compact Framework에서 지원
특정 형식에 대한 해시 함수로 사용되며 해시 알고리즘 및 해시 테이블과 같은 데이터 구조에 사용하기 적당합니다.
GetService(MarshalByValueComponent에서 상속)
IServiceProvider의 구현자를 가져옵니다.
GetType(Object에서 상속)
.NET Compact Framework에서 지원
현재 인스턴스의 Type을 가져옵니다.
ToString(Object에서 상속)
.NET Compact Framework에서 지원
이중에서 중요한 몇 가지 속성만 살펴보고 가도록 하겠다.
RowStateFilter 속성
RowStateFilter 속성
멤버 이름
설명
값
Added
.NET Compact Framework에서 지원
새 행입니다.
4
CurrentRows
.NET Compact Framework에서 지원
변경되지 않은 행, 새 행 및 수정된 행을 포함한 현재 행입니다.
22
Deleted
.NET Compact Framework에서 지원
삭제된 행입니다.
8
ModifiedCurrent
.NET Compact Framework에서 지원
현재 버전으로서 원본 데이터의 수정된 버전입니다(ModifiedOriginal 참조).
16
ModifiedOriginal
.NET Compact Framework에서 지원
원래 버전이며 수정되어 ModifiedCurrent로 사용할 수 있는 경우를 포함합니다.
32
None
.NET Compact Framework에서 지원
없음
0
OriginalRows
.NET Compact Framework에서 지원
변경되지 않은 행과 삭제된 행을 포함한 원본 행입니다.
42
Unchanged
.NET Compact Framework에서 지원
변경되지 않은 행입니다.
2
RowStateFilter 속성은 현재 행 상태를 바탕으로 데이터를 걸러낼 수 있도록 하는 속성이다. DataView의 기본 설정은 CurrentRows로 설정되어 있겠지만 필요에 따라서 삭제된 행이나 수정된 행, 추가된 행 등을 필터링 할 수 있으며 또 변경전의 데이터 원본을 출력할 수도 있다.
RowFilter 속성
DataView에 표시할 행을 필터링하는 데 사용하는 식을 가져오거나 설정한다.
RowFilter 값을 만들려면 열 이름과 연산자, 필터링 대상 값을 차례로 지정합니다. 이 값은 따옴표로 묶어야 합니다. 예를 들면 다음과 같다.
"LastName = 'Smith'"
자세한 내용은 DataColumn 클래스의 Expression 속성을 참조한다.
null 값이 있는 열만 반환하려면 다음 식을 사용합니다.
"Isnull(Col1,'Null Column') = 'Null Column'"
Sort 속성
DataView에 대한 정렬 열과 정렬 순서를 가져오거나 설정한다.
열 이름과 "ASC"(오름차순) 또는 "DESC"(내림차순)로 구성된 문자열이다. 열은 기본적으로 오름차순으로 정렬된다.. 여러 개의 열은 쉼표로 구분할 수 있다.
// Get the DefaultViewManager of a DataTable.
DataView myDataView = DataTable1.DefaultView;
// By default, the first column sorted ascending.
myDataView.Sort = "State, ZipCode DESC";
여기 3장에서는 Visual Studio를 통한 ADO.NET 프로그램의 작성법에 대해서 살펴보았다.
다음 장에서는 DataReader와 DataSet등을 하나씩 살펴보도록 하겠다.
정리
여기서는 ADO.NET의 특이한 객체 3가지인 Data Mapping, Untyped Dataset 그리고 DataView에 대해서 살펴보았다. 실제 예제는 역기서 다뤄지지 않았는데 차후에 하나씩 심도있게 다시 정리할 예정이다.
1. [Create Connection and Query]
SqlConnection conn;
conn = new SqlConnection(Server=localhost; user id=sa;password=;database=northwind");
String sql = "Select * from Address";
2.[create DataAdapter]
SqlDataAdapter adapter = new SqlDataAdapter();
3.[set SqlCommand]
adapter.SelectCommand = new SqlCOmmand(sql, conn);
4.[create DataSet]
DataSet ds = new DataSet();
5.[fill DataSet by DataAdapter]
adapter.Fill(ds);
6.[doing jobs]
.....
7.[Close connection]….
Adapter
DataSet
Adpater.Fill(DataSet)