gpt4 book ai didi

mysql - 如何确定由 MySql .Net Connector 的 MySqlDateTime 结构表示的列类型?

转载 作者:行者123 更新时间:2023-11-29 01:34:21 25 4
gpt4 key购买 nike

DataColumn.DataType 返回 FullName = "MySql.Data.Types.MySqlDateTime",无论它代表的列类型是 DATE、TIME 还是 DATETIME。

很明显,我可以查询 information_schema.columns 表,但我希望连接器库将此详细信息存储在我在文档中找不到的某个地方。

最佳答案

通过快速查看 MySQLClient 源代码,我认为您的最佳选择是 IDataReader.GetDataTypeName()。这是列数据类型的基础 DBMS 名称。有关(有限的)更多信息,请参阅 MSDN docscorresponding MySQL docs对于此属性。

这是来自 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";
}
}

这是您可能想从 MetaData.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");
}

关于mysql - 如何确定由 MySql .Net Connector 的 MySqlDateTime 结构表示的列类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1230203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com