是否有一个内置的类,我可以用它来解析包含MySQL列数据类型的字符串,并返回一个等效的.net类型对象

本文关键字:返回 类型 对象 net 字符串 一个 我可以 内置 有一个 MySQL 是否 | 更新日期: 2023-09-27 18:16:23

是否有一个内置的类,我可以用它来解析包含MySQL列数据类型的字符串,并返回一个等效的。net类型对象?

我想转换一些从表中读取列信息的代码,这样就不必回拉一行数据并从中获取模式信息(使用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],如果一个存在于框架/ODBC/ADO.NET。

是否有一个内置的类,我可以用它来解析包含MySQL列数据类型的字符串,并返回一个等效的.net类型对象

您可以使用OdbcDataReader。GetFieldType方法,例如:

Type firstColumnType = odrColumnReader.GetFieldType(0);