2012-04-28 3 views
0

나는 놀랍게도 거의 결과를 찾지 못했습니다. DataColum에 대한 데이터 유형 속성이 있지만 SQL 서버 데이터베이스에서 데이터를 가져올 때 검색되는 데이터 유형이 무엇인지 알 수 있습니까? 나는 SqlDataAdapter와 함께 DataTable을 채우고 있습니다. 다음과 같이 값을 얻으려면, 내가 일 :데이터베이스 데이터 유형은 DataColumn 클래스에서 어떻게 반환됩니까?

DataTable dtt = Database.get(SQLString); //pseudo-code 
string value = dtt.Rows[0][0]; //Or is this a string? 

그래서 dtt.Rows[0][0]에 무엇 데이터베이스 열 데이터 유형은 BIGINT, INT, 날짜 또는 비트가? 문자열을 먼저 변환 한 다음 필요로하는 다른 데이터 유형으로 변환해야합니까? 데이터베이스 열 데이터 유형이 bigint, int, date 또는 bit 경우

+0

테이블 스키마를 게시하고 이름으로 열에 액세스해야하며 Field 및 SetField DataRow 확장 메서드를 사용하면 훨씬 쉽습니다. s –

+0

두 번째 줄에 중단 점을 설정 한 다음 디버거에서 값을 검사하면 질문에 매우 빠르게 응답 할 수 있습니다. –

+0

@AntonioBakula 스키마 란 무엇을 의미합니까? 미안 해요, 저는 데이터베이스에 익숙하지 않습니다 ...하지만 당신이 내 스키마를 알 필요가 있는지 의심 스럽습니다. 난 그냥 데이터 형식이 채워진 경우 및 C# 데이터 형식으로 변환하는 가장 좋은 방법을 알고 싶습니다 ... – MarioDS

답변

2

그것의 당신이이 테이블이 있다고 가정 해 봅시다 예를 들어, 데이터베이스에 정의 된 방법에 따라 음 :

CREATE TABLE [dbo].[Test](
    [ID] [int] NOT NULL, 
    [Name] [nvarchar](128) NOT NULL, 
    [Birthday] [datetime]) 

는 다음처럼 첫 번째 행에 액세스 할 수 있습니다 :

DataTable dtt = Database.get("Select * from Test"); //pseudo-code 
DataRow rw = dtt.Rows[0]; 
int id = rw.Field<int>("ID"); 
string name = rw.Field<string>("Name"); 
DateTime dt = rw.Field<DateTime>("Birthday"); 

또는

DataTable dtt = Database.get("Select * from Test"); //pseudo-code 
int id = (int) dtt[0]["ID"]; 
string name = (string) dtt[0]["Name"]; 
DateTime dt = (DateTime) dtt[0]["Birthday")]; 
+0

코드 예제를 설명해 주셔서 감사합니다. – MarioDS

2

그래서 dtt.Rows[0][0] 무엇입니까?

는 각각 Int64, 박스형 Int32, 박스형 DateTime 및 박스형 Boolean 박스형. 이것이이 표현식의 반환 유형이 Object 인 이유입니다. 따라서 적절한 유형의 값을 반환 할 수 있습니다. 당신이해야 할 일 (반환되어야하는 타입을 아는 것)은 캐스팅/unbox를 삽입하는 것입니다 - 당신이 그들 모두를 Object s로 계속 처리하기를 원하지 않는 한.

그리고 안토니오의 의견에 동의 - 오히려 서수 위치보다는 이름으로 열을 액세스하는 것이 바람직 할 것이다 - 당신이 string들보다는 int들, 수락하거나 적어도 IndexOf()를 사용하는 오버로드 된 연산자를 사용할 수 있습니다 런타임에 서수 위치를 조회합니다.