有一个问题。 OracleDataReader
可以按类型报告name
,type
和value
列。
int i = № of column
string name = reader.GetName(i)
Type fieldType = reader.GetFieldType(i)
reader.GetFieldValue<T>(i)
GetFieldType
方法返回字段Type
。
例如:
Type fieldType = reader.GetFieldType(i)
fieldType.name = System.String
在GetFieldValue<T>
方法而不是T
中,我将类String
指定为...
string result = reader.GetFieldValue<string>(i);
下面是我在TypeCode
上迭代的代码部分。
有没有一种通过指定类型来指定类的方法?
var result = reader.GetFieldValue<fieldType.class>(i);
using (OracleDataReader reader = cmd.ExecuteReader()) {
while (reader.Read()) {
int count = reader.FieldCount;
string[] rows = new string[count];
for (int i = 0; i < count; i++) {
rows[i] = String.Format(@"""{0}"":", reader.GetName(i));
Type fieldType = reader.GetFieldType(i);
if (reader.IsDBNull(i)) {
DBNull nullValue = reader.GetFieldValue<DBNull>(i);
rows[i] += SerializeOracleValue(nullValue);
} else {
switch (Type.GetTypeCode(fieldType)) {
case TypeCode.Boolean:
bool boolValue = reader.GetFieldValue<bool>(i);
rows[i] += SerializeOracleValue(boolValue);
break;
case TypeCode.DBNull:
DBNull nullValue = reader.GetFieldValue<DBNull>(i);
rows[i] += SerializeOracleValue(nullValue);
break;
case TypeCode.Int32:
int intValue = reader.GetFieldValue<int>(i);
rows[i] += SerializeOracleValue(intValue);
break;
case TypeCode.Decimal:
decimal decValue = reader.GetFieldValue<decimal>(i);
rows[i] += SerializeOracleValue(decValue);
break;
case TypeCode.DateTime:
DateTime dateValue = reader.GetFieldValue<DateTime>(i);
rows[i] += SerializeOracleValue(new DateTimeOffset(dateValue));
break;
case TypeCode.String:
string stringValue = reader.GetFieldValue<string>(i);
rows[i] += SerializeOracleValue(stringValue);
break;
default:
break;
}
}
}
Console.Out.WriteLine($"{{{String.Join(",", rows)}}}");
}
Console.Out.WriteLine("Empty");
}