1

我正在尝试使用 Mono 2.10.5 从http://www.mono-project.com/MySQL在 Ubuntu 11.10 上获取演示。

将 MySQL v2 驱动程序(重命名后)安装到 gac。在 machine.config 中添加了 provider 一行。

Hello World 演示编译并运行良好。以下代码在 MSVS 上正常执行和连接。

编译 cmd 有效: mcs TestMysqlConnect.cs -r:System.Data.dll -r:/home/steve/MONO/Assemblies/Mysql/v2/MySql.Data.dll

using System;
using System.Data;
using MySql.Data.MySqlClient;

public class Test
{
   public static void Main(string[] args)
   {
      string connectionString =
      "Server=192.168.111.4;" +
      "Database=LOADTRACKER;" +
      "Port=3306;" +
      "User ID=oec;" +
      "Password=oec;" +
      "Pooling=false";

    Console.WriteLine("Create MySqlConnection");

   IDbConnection dbcon;
   dbcon = new MySqlConnection(connectionString);

    Console.WriteLine("dbcon.Open();");

   dbcon.Open();

   IDbCommand dbcmd = dbcon.CreateCommand();

    Console.WriteLine("dbcon.CreateCommand();");

   // requires a table to be created named employee
   // with columns firstname and lastname
   // such as,
   //        CREATE TABLE employee (
   //           firstname varchar(32),
   //           lastname varchar(32));
   string sql =
       "SELECT Account, Security " +
       "FROM accesslist";
   dbcmd.CommandText = sql;
   IDataReader reader = dbcmd.ExecuteReader();
   while(reader.Read()) {
        string acct = (string) reader["Account"];
        string sec = (string) reader["Security"];

        Console.WriteLine("Acct: " + acct + " (" + sec + ")");
   }
   // clean up
   reader.Close();
   reader = null;
   dbcmd.Dispose();
   dbcmd = null;
   dbcon.Close();
   dbcon = null;
   }
}

执行此代码会产生:

$mono ./TestMysqlConnect.exe
Create MySqlConnection
dbcon.Open();

Unhandled Exception: System.OverflowException: Number overflow.
  at (wrapper managed-to-native) object:__icall_wrapper_mono_array_new_specific (intptr,int)
  at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.HandleAuthChange (MySql.Data.MySqlClient.MySqlPacket packet) [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.Authenticate (Boolean reset) [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.NativeDriver.Authenticate (System.String authMethod, Boolean reset) [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.MySqlConnection.Open () [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.OverflowException: Number overflow.
  at (wrapper managed-to-native) object:__icall_wrapper_mono_array_new_specific (intptr,int)
  at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.HandleAuthChange (MySql.Data.MySqlClient.MySqlPacket packet) [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.Authenticate (Boolean reset) [0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.NativeDriver.Authenticate (System.String authMethod, Boolean reset) [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.MySqlConnection.Open () [0x00000] in <filename unknown>:0

有趣的是,如果我提供了错误的用户/密码,我会得到预期的异常:

[ERROR] FATAL UNHANDLED EXCEPTION: MySql.Data.MySqlClient.MySqlException: Authentication to host '192.168.111.4' for user 'root' using method 'mysql_native_password' failed with message: Access denied for user 'root'@'linux' (using password: YES) ---> MySql.Data.MySqlClient.MySqlException: Access denied for user 'root'@'linux' (using password: YES)

任何帮助是极大的赞赏。谢谢你。

4

0 回答 0