어떻게 확인할 수 있습니 열 형식으로 표시 MySql.Net 커넥터 MySqlDateTime 구조는?
-
22-07-2019 - |
문제
DataColumn.데이터 유형을 반환 FullName="MySql.데이터입니다.형식입니다.MySqlDateTime"의 유형에 관계 없이 열을 나타내는 경우,어느 날짜,시간,날짜/시간입니다.
분명히 나를 쿼리할 수 있습니다 information_schema.columns 테이블,하지만 난 기대하는 이 커넥터는 라이브러리점에 이 세부 사항이 어딘가에 나는 단지에서 찾을 수 없는 설명서를 참조하십시오.
해결책
에서는 빠른 보 MySQLClient 소스 코드,나는 당신의 최고의 선택입니다 IDataReader.GetDataTypeName().이 기본 DBMS 의 이름에 대한 열 데이터 형식.For(제한된 양의)더 많은 정보 보 MSDN 문서 고 해당 MySQL 문서 이 제공합니다.
여기에 소스에서 MySqlDateTime.cs 이 숙박 시설에는 약속:
string IMySqlValue.MySqlTypeName
{
get
{
switch (type)
{
case MySqlDbType.Date: return "DATE";
case MySqlDbType.Newdate: return "NEWDATE";
case MySqlDbType.Timestamp: return "TIMESTAMP";
}
return "DATETIME";
}
}
여기에 또 다른 유틸리티 기능을 할 수 있습을 빌려드에서,메타데이터가 포함되어 있습니다.cs:
public static MySqlDbType NameToType(string typeName, bool unsigned,
bool realAsFloat, MySqlConnection connection)
{
switch (typeName.ToUpper(CultureInfo.InvariantCulture))
{
case "CHAR": return MySqlDbType.String;
case "VARCHAR": return MySqlDbType.VarChar;
case "DATE": return MySqlDbType.Date;
case "DATETIME": return MySqlDbType.DateTime;
case "NUMERIC":
case "DECIMAL":
case "DEC":
case "FIXED":
if (connection.driver.Version.isAtLeast(5, 0, 3))
return MySqlDbType.NewDecimal;
else
return MySqlDbType.Decimal;
case "YEAR":
return MySqlDbType.Year;
case "TIME":
return MySqlDbType.Time;
case "TIMESTAMP":
return MySqlDbType.Timestamp;
case "SET": return MySqlDbType.Set;
case "ENUM": return MySqlDbType.Enum;
case "BIT": return MySqlDbType.Bit;
case "TINYINT":
return unsigned ? MySqlDbType.UByte : MySqlDbType.Byte;
case "BOOL":
case "BOOLEAN":
return MySqlDbType.Byte;
case "SMALLINT":
return unsigned ? MySqlDbType.UInt16 : MySqlDbType.Int16;
case "MEDIUMINT":
return unsigned ? MySqlDbType.UInt24 : MySqlDbType.Int24;
case "INT":
case "INTEGER":
return unsigned ? MySqlDbType.UInt32 : MySqlDbType.Int32;
case "SERIAL":
return MySqlDbType.UInt64;
case "BIGINT":
return unsigned ? MySqlDbType.UInt64 : MySqlDbType.Int64;
case "FLOAT": return MySqlDbType.Float;
case "DOUBLE": return MySqlDbType.Double;
case "REAL": return
realAsFloat ? MySqlDbType.Float : MySqlDbType.Double;
case "TEXT":
return MySqlDbType.Text;
case "BLOB":
return MySqlDbType.Blob;
case "LONGBLOB":
return MySqlDbType.LongBlob;
case "LONGTEXT":
return MySqlDbType.LongText;
case "MEDIUMBLOB":
return MySqlDbType.MediumBlob;
case "MEDIUMTEXT":
return MySqlDbType.MediumText;
case "TINYBLOB":
return MySqlDbType.TinyBlob;
case "TINYTEXT":
return MySqlDbType.TinyText;
case "BINARY":
return MySqlDbType.Binary;
case "VARBINARY":
return MySqlDbType.VarBinary;
}
throw new MySqlException("Unhandled type encountered");
}
제휴하지 않습니다 StackOverflow