2015-12-05 5 views
1

Я могу открыть соединение с MySQL 5.7 в порядке. Когда я выполняю запрос, я получаю сообщение об ошибке.Ошибка MySQL MySQL

Мой код:

using UnityEngine; 
using System; 
using System.Data; 
using System.Text; 
using System.Collections; 
using System.Collections.Generic; 
using System.Security.Cryptography; 
using MySql.Data; 
using MySql.Data.MySqlClient; 

public class DatabaseHandler : MonoBehaviour { 

    public string host, database, user, password, charset, soo; 
    public bool pooling = true; 

    private string connectionString; 
    private MySqlConnection con = null; 
    private MySqlCommand cmd = null; 
    private MySqlDataReader rdr = null; 

    private MD5 _md5Hash; 

    void Awake() { 

     DontDestroyOnLoad(this.gameObject); 
     string connectionString = "Server="+host+";Database="+database+";User ID="+user+";Password="+password+";CharSet="+charset+";port=3306"+";Pooling="; 
     if (pooling){ 
      connectionString += "true;"; 
     } else { 
      connectionString += "false;"; 
     } 

     try { 
      con = new MySqlConnection(connectionString); 
      con.Open(); 
      Debug.Log ("Mysql State: " + con.State); 
      String cmdText = "SELECT * FROM unicorn"; 
      MySqlCommand cmd = new MySqlCommand(cmdText, con); 
      soo = (String) cmd.ExecuteScalar(); // THIS is line 54 in the error 
      Debug.Log (soo); 
     } catch (MySqlException ex) 
     { 
      Debug.Log("hits ex"); 
      Console.WriteLine("Error: {0}", ex.ToString()); 

     } finally 
     { 
      if (rdr != null) 
      { 
       rdr.Close(); 
      } 

      if (con != null) 
      { 
       con.Close(); 
      } 
     } 
    } 

    void OnApplicationQuit() { 
     if(con != null) { 
      if(con.State.ToString() != "Closed") { 
       con.Close(); 
       Debug.Log ("MySql Connection closed"); 
      } 
      con.Dispose(); 
     } 
    } 

    public string GetConnectionState(){ 
     return con.State.ToString(); 
    } 
} 

Ошибка:

KeyNotFoundException: The given key was not present in the dictionary. System.Collections.Generic.Dictionary`2[System.String,MySql.Data.MySqlClient.CharacterSet].get_Item (System.String key) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:150) MySql.Data.MySqlClient.CharSetMap.GetCharacterSet (DBVersion version, System.String CharSetName) MySql.Data.MySqlClient.MySqlField.SetFieldEncoding() MySql.Data.MySqlClient.MySqlField.set_CharacterSetIndex (Int32 value) MySql.Data.MySqlClient.MySqlField.SetTypeAndFlags (MySqlDbType type, ColumnFlags flags) MySql.Data.MySqlClient.NativeDriver.GetColumnData (MySql.Data.MySqlClient.MySqlField field) MySql.Data.MySqlClient.NativeDriver.GetColumnsData (MySql.Data.MySqlClient.MySqlField[] columns) MySql.Data.MySqlClient.Driver.GetColumns (Int32 count) MySql.Data.MySqlClient.ResultSet.LoadColumns (Int32 numCols) MySql.Data.MySqlClient.ResultSet..ctor (MySql.Data.MySqlClient.Driver d, Int32 statementId, Int32 numCols) MySql.Data.MySqlClient.Driver.NextResult (Int32 statementId) MySql.Data.MySqlClient.MySqlDataReader.NextResult() MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (CommandBehavior behavior) MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() MySql.Data.MySqlClient.MySqlCommand.ExecuteScalar() (wrapper remoting-invoke-with-check) MySql.Data.MySqlClient.MySqlCommand:ExecuteScalar() DatabaseHandler.Awake() (at Assets/Scripts/DatabaseHandler.cs:54)

Дополнительная информация: У меня была подобная ошибка при создании первоначального подключения к MySQL 5.7 сервер. Он был исправлен включением кодировки в connectionString, например.

Database=weather;Server=127.0.0.1;Uid=root;Password=123456;pooling=false;CharSet=utf8;port=3306

Я не уверен, поможет ли эта информация. Это мой пост из этой проблемы (разрешен), если вам интересно. Unity3D connection to MySQL error

Спасибо!

+0

Посмотрите на второй по последнему методу: MySql.Data.MySqlClient.CharSetMap.GetCharacterSet (версия DBVersion, System.String CharSetName). Вероятно, вы используете недопустимый набор символов –

+0

, определяете ли вы свой тип столбца первичного ключа в идентификаторе базы данных? – MHSFisher

+0

@Fisher Я не определил первичный ключ – wsgb

ответ

0

Я заметил, что у многих людей были такие же проблемы, как у меня. Поэтому я решил использовать другой хост (rackspace) для моей базы данных MySQL, чтобы избежать вышеупомянутой проблемы. Подойдя к другому хозяину, проблему можно избежать. Вероятно, проблема связана с настройкой базы данных.

0

Я не знаю, как это исправить, но это началось со мной, когда наш дБ отправился из антилопы в барракуду. BTW varchars все еще возвращаются, только когда вы пытаетесь вернуть числовые типы данных, вы получаете эту ошибку. По крайней мере для меня! Не знаю, как это исправить, но надеясь, что информация кому-то поможет.

+0

Я смог исправить это, обновив версию .Net Connector – Autodidact

Смежные вопросы