DataReader 개체에서 필드의 데이터 유형 찾기
다음과 같은 질문이 있습니다.
SqlCommand cmd = new SqlCommand("Select employee_id,
lastname, firstname from Employees", conn);
// Execute reader
SqlDataReader reader = cmd.ExecuteReader();
필드의 데이터 유형을 알고 싶다고 가정합니다.employee_id
다음을 사용하여 이 문제를 결정하는 방법SqlDataReader
?
reader.GetFieldType(int ordinal)
필드의 .NET 유형을 반환하는 동안:
reader.GetDataTypeName(int ordinal)
데이터 원본에 있는 필드의 데이터 형식을 나타내는 문자열을 반환합니다(예:varchar
).GetFieldType
당신이 설명한 사용 사례를 고려할 때 당신에게 더 유용할 것 같습니다.
다음을 통해 모든 관련 메타데이터를 얻을 수 있습니다.
var metaDataList = new List<IDictionary<String, Object>>();
using (SqlDataReader reader = cmd.ExecuteReader())
{
var hasRows = reader.HasRows;
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
dynamic fieldMetaData = new ExpandoObject();
var columnName = reader.GetName(i);
var value = reader[i];
var dotNetType = reader.GetFieldType(i);
var sqlType = reader.GetDataTypeName(i);
var specificType = reader.GetProviderSpecificFieldType(i);
fieldMetaData.columnName = columnName;
fieldMetaData.value = value;
fieldMetaData.dotNetType = dotNetType;
fieldMetaData.sqlType = sqlType;
fieldMetaData.specificType = specificType;
metaDataList.Add(fieldMetaData);
}
}
}
약간 과잉 살상이지만, 그 이상의 유형 정보가 필요할 것이라고는 상상할 수 없습니다.if 문 또는 예외 처리에 hasRows 변수를 사용할 수도 있습니다.
사용하다.GetFieldType(colnameIndex)
다음과 같이:
If (reader.GetFieldType(0) Is GetType(String) Or reader.GetFieldType(0) Is
GetType(Date) )
{
...
}
또는 다음과 같을 수 있습니다.reader.GetFieldType(0)
추가 논리에 따라 이 함수를 간단한 텍스트 또는 조건부 형식으로 성형할 수 있습니다.
.GetDataTypeName
당신이 추구하는 것일 수도 있습니다.
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getdatatypename.aspx
검색할 유형의 열의 서수를 전달하는 방법을 사용할 수 있습니다.시스템을 반환합니다.필드 유형입니다.
예를 들어, 첫 번째 열의 유형을 가져오려면 다음을 수행할 수 있습니다.var firstColType = reader.GetFieldType(0);
이것이 오래된 게시물이라는 것은 인정하지만, 저는 그냥 우연히 발견했습니다.이것이 바로 제 접근 방식입니다. 열을 #로 참조하지 않고 DataReaders에서 강력한 타이핑을 사용할 수 있기 때문입니다(열이 순서를 변경할 때 강력하게 타이핑되지 않는 것과 마찬가지입니다).
다음과 같은 방법을 사용해 보십시오.
using (dsSomeDataSet dsList = new dsSomeDataSet())
{
using (System.Data.SqlClient.SqlCommand sqlCmd = new System.Data.SqlClient.SqlCommand())
{
//blah blah blah take care of parameter definitions for the stored proc
using (SqlDataReader sqlReader = sqlCmd.ExecuteReader())
{
while (sqlReader.Read())
{
//populate each returning row
dsSomeDataSet.tATablesRow rowNote = dsList.tATable.tATablesRow();
//using the actual field name, strongly typed, required using the declared dataset variable, not the dataset object
rowNote.ThisField'sName = new Guid(sqlReader[ dsList.tATable.ThisField'sName.ColumnName].ToString() );
dsList.tNotes.AddtNotesRow( rowNote );
}
sqlReader.Close();
}
} //releases the command resources
} //releases the dataset resources
언급URL : https://stackoverflow.com/questions/17920146/find-the-datatype-of-field-from-datareader-object
'programing' 카테고리의 다른 글
관련 없는 구성 요소 간의 Vue 통신 (0) | 2023.07.09 |
---|---|
"git remote add..." 및 "git push origin master"란 무엇입니까? (0) | 2023.07.09 |
JPA 및 최대 절전 모드를 사용하여 Java 부울 열을 Oracle 번호 열에 매핑 (0) | 2023.07.09 |
연관 테이블을 사용하는 것보다 플래그를 비트 마스크로 저장하는 것이 더 나은 경우는 언제입니까? (0) | 2023.07.09 |
스프링 부트(보안) 및 키클로크로 역할 인증을 사용하시겠습니까? (0) | 2023.07.09 |