Есть ли встроенный класс, который можно использовать для анализа строки, содержащей тип данных столбца MySQL, и возврата эквивалентного объекта типа .NET? - PullRequest
0 голосов
/ 02 декабря 2011

Есть ли встроенный класс, который можно использовать для анализа строки, содержащей тип данных столбца 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], если он существует вFrameWork / ODBC / ADO.NET.

1 Ответ

2 голосов
/ 02 декабря 2011

Вы можете использовать метод OdbcDataReader.GetFieldType , например:

Type firstColumnType = odrColumnReader.GetFieldType(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...