2012-06-13 4 views
1

열 이름을 사용하여 열의 데이터 형식을 가져와야합니다. 나는 C#으로 코딩하고있다. 상황을 좀 더 정확하게 표시 할 수 있도록 일부 날짜를 varchar로 변환하는보기가 있습니다 (정확한 시간없이). 그러나 이는 열의 데이터 유형이 이제 올바르지 않음을 의미합니다. 내가 뭘하고 싶은지는 열 이름을 사용하여 DataTable 스키마에서 열을 조회 한 다음 해당 열의 데이터 유형을 얻는 것입니다. 이 경우보기보다는 주 테이블에서 실제 데이터 유형을 수집합니다. 아이디어?열 이름에서 데이터 형식 가져 오기

답변

4

DataTable.Columns 속성은 DataType 속성을 가진 DataColumn를 얻을 수 indexed by column name을 할 수있는 DataColumnCollection입니다.

+0

SqlDataReader 개체에서 GetSchemaTable()을 사용하여 DataTable에서이 작업을 수행 할 수 있습니까? – steventnorris

+0

GetSchemaTable은 DataTable을 반환하므로 제대로 작동합니다. – kol

+0

글쎄, 스키마 테이블은 SQL 테이블의 열 이름을 보유하지 않는 것 같습니다. 각 행은 SQL 테이블의 열을 나타내며 열은 속성 (예 : 열 이름 및 데이터 형식)이므로이 메서드는 작동하지 않는 것 같습니다. – steventnorris

0

값에서 유형을 유추하지 않으면 어떻게되는지 알 수 없습니다. 뷰의 결과와 코드의 열 이름이있는 경우 뷰가 사용하는 테이블에 대한 정보는 그 시점에서 손실됩니다.

이름을 알고 있으면 테이블 정보를 얻을 수 있습니다.

SELECT TOP 0 * FROM <<tableName>> 

또는 사용 DMV에 : 그 간단한 같은 쿼리를 사용하거나 수행 할 수 있습니다 첫 번째 경우에

SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('<<tableName>>') 

을, 당신은 당신의 열을 찾기 위해 행을 통해 IDataReader에에 GetSchemaTable을 사용하여 반복 이름으로; 두 번째 경우에는 결과 집합 자체를 반복하고 그 방식으로 열을 찾을 수 있습니다.

+0

내가 테이블의 스키마 벌금을 얻을 수있다, 난 그냥 열 이름으로 해당 테이블의 컬럼의 데이터 유형을 알아야합니다. 예를 들어 Name, Birthdate, Age 열이있는 테이블이 있다고 가정 해보십시오. Birthdate라는 열의 데이터 형식을 알고 싶습니다. 하지만 내가 가진 것은 테이블 스키마와 열 이름뿐입니다. – steventnorris

+0

어떤 형식으로 테이블 스키마가 있습니까? –

+0

SqlDataReader 개체에서 GetSchemaTable()을 사용하여 얻은 DataTable C# 개체입니다. – steventnorris

0

SQL Server를 사용하는 경우 SET FMTONLY를 사용할 수 있습니다. 클라이언트에 메타 데이터 만 반환합니다. 실제로 쿼리를 실행하지 않고도 응답 형식을 테스트하는 데 사용할 수 있습니다.

SqlCommand cmd = connection.CreateCommand(); 
cmd.CommandText = "SET FMTONLY ON; select column from table; SET FMTONLY OFF"; 
SqlDataReader reader = cmd.ExecuteReader(); 
SqlDbType type = (SqlDbType)(int)reader.GetSchemaTable().Rows[0]["ProviderType"]; 

씨 : StackOverflow

1

INFORMATION_SCHEMA.COLUMNS는 표는 sys.columns 테이블보다 필요에 대한 더 명확한 정보를 제공합니다. 다음 시도 할 수 :

SELECT data_type, character_maximum_length 
FROM information_schema.columns 
WHERE table_name = 'tableName' AND column_name = 'columnName'