我需要在运行时使用从数据库返回的值作为属性来创建OdbcParameter的实例。 我的问题是数据类型的描述是以大写字母的形式返回的,这就是为什么Enum.Parse或Enum.TryParse无法将我的字符串转换为它的枚举对应值:
var datatype = (OdbcType)Enum.Parse(typeof(OdbcType), "NVARCHAR");
为了解决这个问题,我创建了一个词典:
public static Dictionary<string, OdbcType> OdbcDataTypeDictionary = new Dictionary<string, OdbcType>()
{
{"BIGINT", OdbcType.BigInt},
{"BINARY", OdbcType.Binary},
{"BIT", OdbcType.Bit},
{"CHAR", OdbcType.Char},
{"DATE", OdbcType.Date},
{"DATETIME", OdbcType.DateTime},
{"DECIMAL", OdbcType.Decimal},
{"DOUBLE", OdbcType.Double},
{"IMAGE", OdbcType.Image},
{"INT", OdbcType.Int},
{"NCHAR", OdbcType.NChar},
{"NTEXT", OdbcType.NText},
{"NUMERIC", OdbcType.Numeric},
{"NVARCHAR", OdbcType.NVarChar},
{"REAL", OdbcType.Real},
{"SMALLDATETIME", OdbcType.SmallDateTime},
{"SMALLINT", OdbcType.SmallInt},
{"TEXT", OdbcType.Text},
{"TIME", OdbcType.Time},
{"TIMESTAMP", OdbcType.Timestamp},
{"TINYINT", OdbcType.TinyInt},
{"UNIQUEIDENTIFIER", OdbcType.UniqueIdentifier},
{"VARBINARY", OdbcType.VarBinary},
{"VARCHAR", OdbcType.VarChar}
};
它正在运作,但我不相信这是最好的解决方案。
有没有人对更好的解决方法有任何想法?
答案 0 :(得分:3)
Enum.TryParse有另一个布尔参数来忽略大小写,它将起作用MSDN Link
答案 1 :(得分:1)
您希望Enum.Parse的重载构造函数具有ignoreCase
参数,即
(OdbcType)Enum.Parse(typeof(OdbcType), "NVARCHAR", true);