单声道 - OSX - ODBC

时间:2009-10-21 19:47:04

标签: macos mono odbc

我已经设置了系统DSN,我可以在其他ODBC应用程序(例如iQueryODBC)中使用它,但在单声道中,我得到“未找到数据源名称和n”(原文如此)。

我通过连接字符串构建器使用“DSN = myodbc”作为连接字符串。

OSX 10.4

最新的单声道套餐 - 2.4.2.3。

有没有人在Mono / OSX上使用ODBC?

(哦 - 这是值得的 - 我相当确定它不相关 - 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 :(得分:0)

在单声道网站上有一个例子可以帮到你。

ODBC-Mono.Net

答案 1 :(得分:0)

我想我已经在Mono邮件列表上看过你关于这个帖子的帖子,但当时太忙了,不能回复。

我已经使用ODBC接口和本机连接器连接到Mac OS X,Linux,Windows和Solaris上的Mono的MySQL数据库(并且在Solaris下只有旧版Mono的问题)。

由于我在生产环境中遇到的问题,我前段时间切换到使用native MySQL connector(我使用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提供程序的测试示例,如果这将有所帮助。

答案 2 :(得分:0)

感谢您的建议,但是'它不起作用 - Connection.Open失败了,就像以前一样,“未找到数据源名称......”它认为DSN不存在,但......它确实如此,因为其他应用程序(非Mono)可以使用它。我已经深入研究了Mono源代码,对于OdbcConnection.Open,但它只是一些本机代码的包装器,我没有源代码。

请注意,我使用的是完全标准的通用代码 - 一个经典的'示例',因此不知道怎么做(我很确定)不知道怎么做 - 我正确地做了,但它只是没有按照网上其他地方的示例工作,因为Odbc连接要求命名DSN,并且本机代码告诉DSN不存在。

另请注意,使用无DSN连接会产生完全相同的错误 - 本机代码提供程序仍然会查找匹配的DSN(显然,在这种情况下)它找不到,因为没有调用DSN “DATABASE = MYDATABASE ...”。

我猜这是与OSX 10.4相关的,所以......我可能不会找到答案。

我也尝试过本机MySql连接器,但无法构建。再次,可能与10.4相关。也许这就是我需要升级的借口......当然!这需要一台新的MacBook ......毫米......闪亮!!

再次感谢你的建议,伙计。

答案 3 :(得分:0)

为了其他任何人的利益,您 CAN 在10.4上编译本机MySql连接器。您从MySql.com下载的“sln”包含许多其他不需要的东西,并且不会编译!但不要被推迟 - 只需继续从解决方案中删除项目,直到它编译,然后抓住MySql.Data.DLL添加到您的项目。 (您不必将其添加到GAC中 - 只需将其放在项目的“bin”目录中,然后按文件引用它。)

@Iain - 再次感谢您的建议。我向太太解释说“互联网上的一个好人”说唯一的解决方案是新的MacBook Pro而且她正在考虑它!