前提・実現したいこと
UnityでMySqlを使用しようとしています。
こちらのサイトを参考に、Api Compatibility Levelを「.NET Standard 2.0」に変更し、スクリプトを実行して動作確認――というところまで来ましたが、タイトルの通りエラーが発生しました。
サイトのコードをコピペし、SERVERなどの変数を自分のものに変更して、Sceneの空オブジェクトにアタッチして実行するとエラーになります。
ダウンロードするよう指示されている「MySql connector」では「netstandard2.0」フォルダの中身を使用しました。サイトでは「MySql.Data.dll」を入れるようにと指示されていましたが、私の環境ではそれだとエラーが出る為、フォルダ内の全ファイルをAssets/Pluginsに投入しています。
Unityエディター上でも、Windows用にビルドしたモノでも同じエラーが出ます。
そもそも参考にしているサイトの情報が6年前と古いのですが、同じような方法でアクセスするやり方の新しい情報が見当たらないのでこの方法を取っています。
このエラーが解決可能なのであればその方法を、不可能であれば他のやり方を教えて戴きたいです。
MySqlを使い始めたのがつい最近、しかも1か月前に躓いてから暫くやっていなかったほどなので、サーバーに関しては全くの初心者です。自力ではUnityからMySqlへと接続する方法が分かりません。
発生している問題・エラーメッセージ
PlatformNotSupportedException: Operation is not supported on this platform. System.Configuration.ClientConfigPaths..ctor (System.String exePath, System.Boolean includeUserConfig) (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) System.Configuration.ClientConfigPaths.GetPaths (System.String exePath, System.Boolean includeUserConfig) (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) System.Configuration.ClientConfigurationHost.get_ConfigPaths () (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) System.Configuration.ClientConfigurationHost.GetStreamName (System.String configPath) (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) System.Configuration.ClientConfigurationHost.get_IsAppConfigHttp () (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) System.Configuration.Internal.DelegatingConfigHost.get_IsAppConfigHttp () (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) System.Configuration.ClientConfigurationSystem..ctor () (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) System.Configuration.ConfigurationManager.EnsureConfigurationSystem () (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) Rethrow as ConfigurationErrorsException: Configuration system failed to initialize System.Configuration.ConfigurationManager.EnsureConfigurationSystem () (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) System.Configuration.ConfigurationManager.PrepareConfigSystem () (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) System.Configuration.ConfigurationManager.GetSection (System.String sectionName) (at <0e721f564ffa49e6b1d97ad7b9fda1f2>:0) MySql.Data.MySqlClient.MySqlConfiguration..cctor () (at <b57b71682166477899e3186c487d985b>:0) Rethrow as TypeInitializationException: The type initializer for 'MySql.Data.MySqlClient.MySqlConfiguration' threw an exception. MySql.Data.MySqlClient.Replication.ReplicationManager..cctor () (at <b57b71682166477899e3186c487d985b>:0) Rethrow as TypeInitializationException: The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception. MySql.Data.MySqlClient.MySqlConnection.Open () (at <b57b71682166477899e3186c487d985b>:0) MySqlTest+<SelectData>d__7.MoveNext () (at Assets/Scripts/MySql/MySqlTest.cs:41) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <29ad182faa3f478c9310d6a2e7143c15>:0) UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator) MySqlTest:Start() (at Assets/Scripts/MySql/MySqlTest.cs:21)
該当のソースコード
C#
1using UnityEngine; 2using System; 3using System.Collections; 4 5using MySql.Data; 6using MySql.Data.MySqlClient; 7 8public class MySqlTest : MonoBehaviour 9{ 10 11 string SERVER = "x.x.x.x"; 12 string DATABASE = "testdb"; 13 string USERID = "unity-ntss"; 14 string PORT = "3306"; 15 string PASSWORD = "password"; 16 string TABLENAME = "testtable"; 17 18 void Start() 19 { 20 21 StartCoroutine(SelectData()); 22 23 } 24 25 IEnumerator SelectData() 26 { 27 28 MySqlConnection con = null; 29 30 string conCmd = 31 "server=" + SERVER + ";" + 32 "database=" + DATABASE + ";" + 33 "userid=" + USERID + ";" + 34 "port=" + PORT + ";" + 35 "password=" + PASSWORD; 36 37 try 38 { 39 40 con = new MySqlConnection(conCmd); 41 con.Open(); // 当該エラーが出る場所 42 43 } 44 catch (MySqlException ex) 45 { 46 Debug.Log(ex.ToString()); 47 } 48 49 string selCmd = "SELECT * FROM " + TABLENAME + "LIMIT 0, 1200;"; 50 51 MySqlCommand cmd = new MySqlCommand(selCmd, con); 52 53 IAsyncResult iAsync = cmd.BeginExecuteReader(); 54 55 while (!iAsync.IsCompleted) 56 { 57 yield return 0; 58 } 59 60 MySqlDataReader rdr = cmd.EndExecuteReader(iAsync); 61 62 while (rdr.Read()) 63 { 64 if (!rdr.IsDBNull(rdr.GetOrdinal("ID"))) 65 { 66 Debug.Log ( "ID : " + rdr.GetString ("ID") ); 67 } 68 } 69 70 rdr.Close(); 71 rdr.Dispose(); 72 con.Close(); 73 con.Dispose(); 74 } 75}
※MySql側でユーザーからテーブル作成、データ追加まで
create user 'unity-ntss'@'%' identified 'password'; create database testdb; create table testdb.testtable (id int, name varchar(12)); insert into testdb.testtable values (1, 'NTSS-Test');
MySql側で問題は起きていません。
試したこと
・Api Compatibility Levelを「.NET 4.x」にし、Connectorの「4.8」フォルダの中身を投入すると、そもそも参照が足りないという旨のエラーが大量に出ます。
・ググってみましたが、出てくる情報はほとんどが「Json.NET」を使用した際に発生した、というものであり参考になりませんでした。また「MySql」を使用していたら起きたという情報でも、現象が「Unityエディター上では動作する」ということなので残念ながら解決には至りませんでした。
補足情報(FW/ツールのバージョンなど)
使用しているバージョン
Unity=2019.4.16f1 Personal
MySql=8.0.26(Connectorも同じ)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/08/27 04:17