是否有一个内置类可以用来解析包含 MySQL 列数据类型的字符串并返回等效的 .NET Type 对象?
我想转换一些从表中读取列信息的代码,这样就不必拉回一行数据并从中获取架构信息(使用 OdbcDataAdapter.FillSchema) - 而是该方法发出一个命令不进行表扫描(希望更快)来获取相同的信息。
要替换的现有代码:
QueryStr.Append("SELECT * FROM ")
.Append("`" + tableName + "`")
.Append(" LIMIT 1 ");
DataTable dsTable = new DataTable();
using (OdbcConnection DbConn = new OdbcConnection(ConnectionStr))
{
OdbcDataAdapter cmd = new OdbcDataAdapter(QueryStr.ToString(), DbConn);
try
{
cmd.FillSchema(dsTable, SchemaType.Mapped);
QuerySuccessful = true;
}
尝试新代码:
StringBuilder QueryStr = new StringBuilder();
QueryStr.Append("DESCRIBE ")
.Append("`" + tableName + "`");
DataTable dsTable = new DataTable();
try
{
using (OdbcConnection DbConn = new OdbcConnection(connectionStr))
{
DbConn.Open();
OdbcCommand cmd = new OdbcCommand(QueryStr.ToString(), DbConn);
OdbcDataReader odrColumnReader = cmd.ExecuteReader();
while (odrColumnReader.Read())
{
string strColumnName = odrColumnReader.GetString(0);
string strColumnType = odrColumnReader.GetString(1);
// strColumnType is a string containing the type - e.g. char(6) or whatever
Type type = typeof (string); // TODO replace this bit with a conversion of strColumnType
columns.Add( new SQLcolumn(strColumnName, type, tableName));
}
DbConn.Close();
}
}
这样做的问题是我以字符串形式返回 strColumnType - 我想将其转换为 .NET 类型以匹配我从 FillSchema 返回的内容。
我不想编写自己的转换方法[使用此信息http://msdn.microsoft.com/en-us/library/cc668763.aspx ] 如果 FrameWork/ODBC/ADO.NET 中存在。
最佳答案
您可以使用OdbcDataReader.GetFieldType method ,例如:
Type firstColumnType = odrColumnReader.GetFieldType(0);
关于c# - 是否有一个内置类可以用来解析包含 MySQL 列数据类型的字符串并返回等效的 .NET Type 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8357722/