Я могу открыть соединение с 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
Спасибо!
Посмотрите на второй по последнему методу: MySql.Data.MySqlClient.CharSetMap.GetCharacterSet (версия DBVersion, System.String CharSetName). Вероятно, вы используете недопустимый набор символов –
, определяете ли вы свой тип столбца первичного ключа в идентификаторе базы данных? – MHSFisher
@Fisher Я не определил первичный ключ – wsgb