Mono - OSX - ODBC - PullRequest
       17

Mono - OSX - ODBC

0 голосов
/ 21 октября 2009

Я настроил системные DSN, которые я могу использовать из других приложений ODBC (например, iQueryODBC), но в моно я получаю «Имя источника данных не найдено и n» (sic).

Я использую «DSN = myodbc» для строки подключения через построитель строки подключения.

OSX 10.4

Последние пакеты Mono - 2.4.2.3.

Кто-нибудь когда-нибудь работал с ODBC на Mono / OSX?

(О - за что это стоит - и я вполне уверен, что это не актуально - DSN предназначен для драйвера MySql 5.)

Полный код:

        public static void Main (string[] args)
    {
        OdbcConnectionStringBuilder csb = new OdbcConnectionStringBuilder();
        csb.Dsn = args[0];
        DataSet d = GetDataSet(csb.ConnectionString , "SELECT * FROM tbl");
        Console.WriteLine (d.Tables.Count);
    }

    public static DataSet GetDataSet(string connectionString, string queryString)
    {
        Console.WriteLine("GetDataSetFromAdapter(" + connectionString + ")");
        DataSet dataSet = new DataSet();
        using (OdbcConnection connection = new OdbcConnection(connectionString))
        {
           OdbcDataAdapter adapter = new OdbcDataAdapter(queryString, connection);
            // Open the connection and fill the DataSet.
            try
            {
                connection.Open();
                adapter.Fill(dataSet);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
        return dataSet;
    }

Ответы [ 4 ]

0 голосов
/ 24 октября 2009

Для удобства всех, кто этим управляет, вы МОЖЕТЕ скомпилировать собственный разъем MySql на 10.4. «Sln», который вы загружаете с MySql.com, содержит много других вещей, которые не требуются и не компилируются! Но не стоит откладывать - просто продолжайте удалять проекты из решения, пока оно не скомпилируется, а затем возьмите MySql.Data.DLL для добавления в ваш проект. (Вам не нужно добавлять его в GAC - просто поместите его в каталог «bin» вашего проекта и ссылайтесь на него по файлу.)

@ Iain - еще раз спасибо за ваш совет. Я объяснил г-же, что «хороший человек в Интернете» сказал, что единственным решением является новый MacBook Pro, и она думает об этом!

0 голосов
/ 23 октября 2009

Мне кажется, я видел ваше сообщение в списке рассылки Mono по этому поводу, но в то время был слишком занят, чтобы отвечать.

Я использовал и интерфейс ODBC, и собственный соединитель для подключения к базам данных MySQL для Mono в Mac OS X, Linux, Windows и Solaris (и только когда-либо возникали проблемы со старой сборкой Mono под Solaris).

Из-за проблемы, с которой я столкнулся в производственной среде, некоторое время назад я перешел на использование собственного коннектора MySQL (я скачал и собрал его с помощью Mono Develop без проблем).

Это пример того, как я использовал интерфейс ODBC:

string connectionString = "DRIVER={MySQL ODBC 3.51 Driver};" 
    + "SERVER=localhost;" 
    + "DATABASE=myDatabase;"
    + "UID=root;"
    + "PASSWORD=p4ssw0rd;";

// Connect to database using ODBC Driver
OdbcConnection dbConnection = new OdbcConnection(connectionString);
dbConnection.Open();

// Execute SQL using the ODBC interface
OdbcCommand dbCommand = dbConnection.CreateCommand();
dbCommand.CommandText = sql
OdbcDataReader dbReader = dbCommand.ExecuteReader();

// Get the result and put it into a hashtable (as an example)
ArrayList arrayList = new ArrayList();
int i = 0;
while(dbReader.Read()) {
    arrayList.Add(new Hashtable());
    Hashtable hashtable = (Hashtable) arrayList[i];
    for (int j = 0; j < dbReader.FieldCount; j++) {
        hashtable.Add(dbReader.GetName( j ).ToString(), dbReader.GetValue( j ));
        }
i++;
}

// Free up resources
dbReader.Close();
dbReader = null;
dbCommand.Dispose();
dbCommand = null;

// Close DB Connection
dbConnection.Close();

Если пример не работает (по непонятной причине), прокомментируйте и дайте мне знать, и я протестирую его и / или предоставлю проверенный пример использования собственного поставщика MySQL, если это будет полезно.

0 голосов
/ 23 октября 2009

Спасибо за совет, но, несмотря на это, он не работает - Connection.Open завершается с ошибкой, как и раньше, с «Имя источника данных не найдено ...» Он думает, что DSN не существует, но ... это происходит, потому что другие приложения (не моно) могут использовать его. Я погрузился в исходный код Mono для OdbcConnection.Open, но это просто оболочка для некоторого нативного кода, исходный код которого у меня нет.

Обратите внимание, что я использую совершенно стандартный, универсальный код - классический «пример», так что это не вопрос (я вполне уверен), что я не знаю, КАК это сделать - я делаю это правильно, но это просто не работают в соответствии с примерами в других местах в сети, потому что соединение Odbc запрашивает именованный DSN, и нативный код сообщает, что DSN не существует.

Обратите внимание, что использование соединения без DSN приводит к ТОЧНО той же ошибке - поставщик собственного кода все еще ищет соответствующий DSN, который (очевидно, в этом случае) он не находит, потому что нет вызываемого DSN "DATABASE = MyDatabase ...".

Полагаю, это связано с OSX 10.4, так что ... Возможно, я не найду ответ.

Я также попробовал родной соединитель MySql, но он не смог собрать. Опять же, может быть 10,4 связаны. Может быть, это оправдание, которое мне нужно обновить ... для чего (конечно!) Потребуется новый MacBook ... мммм ... блестящий !!

Еще раз спасибо за совет, парни.

0 голосов
/ 22 октября 2009

В моно-сайте пример может вам помочь.

ODBC-Mono.Net

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...