在Solaris上使用mono连接MySQL

4

我正在尝试在Solaris 10上使用Mono 2.8.1使用MySQL数据库。为此,我正在尝试使用官方的MySQL Connector/Net。但是我遇到了以下异常:

System.Net.Sockets.SocketException: Protocol option not supported
  at System.Net.Sockets.Socket.GetSocketOption (SocketOptionLevel optionLevel, SocketOptionName optionName) [0x00000] in <filename unknown>:0
  at System.Net.Sockets.Socket.get_ReceiveTimeout () [0x00000] in <filename unknown>:0
  at System.Net.Sockets.NetworkStream.get_ReadTimeout () [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.TimedStream..ctor (System.IO.Stream baseStream) [0x00000] in <filename unknown>:0
  at (wrapper remoting-invoke-with-check) MySql.Data.MySqlClient.TimedStream:.ctor (System.IO.Stream)
  at MySql.Data.MySqlClient.MySqlStream..ctor (System.IO.Stream baseStream, System.Text.Encoding encoding, Boolean compress) [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.NativeDriver.Open () [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.Driver.Open () [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.Driver.Create (MySql.Data.MySqlClient.MySqlConnectionStringBuilder settings) [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection () [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection () [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver () [0x00000] in <filename unknown>:0

显然,Solaris不支持ReceiveTimeout,而连接器(间接)使用它。

有没有什么方法可以解决这个异常?或者在Solaris上另一种使用MySQL数据库的方式?


这个链接建议你尝试使用套接字的异步命令,你有尝试过使用库中的异步命令访问数据库吗? - almog.ori
在该库中没有访问数据库异步的任何命令。 - svick
你尝试过在连接字符串中使用SharedMemory选项进行连接吗? - Hans
@Handjoerg,这只有在SQL服务器在我登录的同一台机器上才能工作,但这里不是这种情况。无论如何,它都没有起作用。 - svick
2个回答

0

奇怪,我刚刚尝试了这个例子,但它没有成功。它以前出现的相同异常错误。不过,我并不需要安装任何东西,服务器上已经安装好了(除了MySQL连接器)。你用的是哪个版本的连接器?你有编译它吗? - svick
Windows 7 x64 Ultimate,VMWare 7.1.3 build-324285,SunOS sol10 5.10 Generic_141445-09 i86pc i386 i86pc。mysql Ver 14.14 Distrib 5.6.2-m5,mono-2.10-sgen-solaris(从 pkg 重新安装),mysql-5.1.60-solaris10-x86_64(使用 v4 文件夹中的 dll)。 - Dmitry Alexandrov
谢谢,但是您列出的安装程序(至少在最新版本5.5.15中)似乎不包含连接器DLL。 - svick
前往http://dev.mysql.com/downloads/connector/net/#downloads,选择mono,获取最新的zip文件。 - Dmitry Alexandrov
是的,那也是我用的那个。我不知道为什么它对你有效而对我无效。 - svick
@svick: 你尝试过使用SharedMemory选项连接吗? - Hans

0
只是一个想法,但是 DevArt 的 MySQL 连接器 (dotConnect for MySQL) 官方支持 Mono,并且也许在 Solaris 上不会有使用 ReceiveTimeout 时的问题。DevArt 数据库连通性组件非常可靠、性能出色,价格也合理。当然,你可以通过他们的试用版来测试你的场景。

如果我因为做这个而得到报酬,那么这将是一个非常合理的价格,但事实并非如此。 - svick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接