c# - 是否有一个内置类可以用来解析包含 MySQL 列数据类型的字符串并返回等效的 .NET Type 对象?

标签 c# mysql .net-4.0 odbc

是否有一个内置类可以用来解析包含 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/

相关文章:

c# - 初学者角色扮演游戏碰撞检测

c# - 如何解析非结构化的 csv 文件

Mysql 将表引擎 MyISAM 更改为 InnoDB

mysql - 如何计算行数并仍然显示所有行? mysql

c# - mvc 模板中定义的导航栏在哪里?

javascript - 如何使用带有单选按钮的 AJAX post 方法将详细信息类列表绑定(bind)到 gridview?

MySQL 准备语句与简单查询性能

c# - 在 Linq 中使用 .NET 4 动态关键字的好例子?

c# - 动态输入数据时 TCP 服务器无法正确接收

c# - 泛型方法可以使用逆变/协变类型吗?