我已经设置了系统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;
}
答案 0 :(得分:0)
在单声道网站上有一个例子可以帮到你。
答案 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而且她正在考虑它!