web-dev-qa-db-ja.com

Unityからデータベースに接続する方法

Unityを介してMS SQLデータベースに接続しようとしています。ただし、接続を開こうとすると、IOException:Connection lostが発生します。

Unity\Editor\Data\Mono\lib\mono\2.0からSystem.Data.dllをインポートしました。私は次のコードを使用しています:

 using UnityEngine;
 using System.Collections;
 using System.Data.Sql;
 using System.Data.SqlClient;

 public class SQL_Controller : MonoBehaviour {

     string conString = "Server=myaddress.com,port;" +
             "Database=databasename;" +
             "User ID=username;" +
             "Password=password;";

     public string GetStringFromSQL()
     {
         LoadConfig();
         string result = "";

         SqlConnection connection = new SqlConnection(conString);
         connection.Open();
         Debug.Log(connection.State);
         SqlCommand Command = connection.CreateCommand();
         Command.CommandText = "select * from Artykuly2";
         SqlDataReader ThisReader = Command.ExecuteReader();
         while (ThisReader.Read())
         {
             result = ThisReader.GetString(0);
         }
         ThisReader.Close();
         connection.Close();

         return result;
     }
 }

これは私が得るエラーです:

IOException: Connection lost
Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacketHeader ()
Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacket ()
Mono.Data.Tds.Protocol.TdsComm.GetByte ()
Mono.Data.Tds.Protocol.Tds.ProcessSubPacket ()
Mono.Data.Tds.Protocol.Tds.NextResult ()
Mono.Data.Tds.Protocol.Tds.SkipToEnd ()
Rethrow as TdsInternalException: Server closed the connection.
Mono.Data.Tds.Protocol.Tds.SkipToEnd ()
Mono.Data.Tds.Protocol.Tds70.Connect (Mono.Data.Tds.Protocol.TdsConnectionParameters connectionParameters)
Mono.Data.Tds.Protocol.Tds80.Connect (Mono.Data.Tds.Protocol.TdsConnectionParameters connectionParameters)

このアプローチのセキュリティリスクは無視してください。テストのためにこれを行う必要があります。セキュリティは後で提供されます。お時間をいただきありがとうございます。

8
MLazowski

別の方法は、コマンドプロンプトで独自の専用サーバーを作成して通信を行い、それをUnityに接続してHandelマルチプレイヤーとSQL通信を行うことです。この方法で、1つの言語で作成されたすべてに固執することができます。しかし、かなり急な学習曲線です。

1
Jason

Unityはゲームエンジンです。

答えが言うとおりです。

ただし、一部のドメインはデータベースに直接接続する必要があります。

ゲームドメインでデータベースに直接アクセスしないでください。

とにかく、問題は英語以外のコンピューター名が原因です。

プロジェクトの前に次のようなエラーに直面しました。

IOException: Connection lost
Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacketHeader ()
Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacket ()
Mono.Data.Tds.Protocol.TdsComm.GetByte ()
Mono.Data.Tds.Protocol.Tds.ProcessSubPacket ()
Mono.Data.Tds.Protocol.Tds.NextResult ()
Mono.Data.Tds.Protocol.Tds.SkipToEnd ()
Rethrow as TdsInternalException: Server closed the connection.
Mono.Data.Tds.Protocol.Tds.SkipToEnd ()
Mono.Data.Tds.Protocol.Tds70.Connect (Mono.Data.Tds.Protocol.TdsConnectionParameters connectionParameters)
Mono.Data.Tds.Protocol.Tds80.Connect (Mono.Data.Tds.Protocol.TdsConnectionParameters connectionParameters)

コンピュータ名を英語に変更した後、機能します。

私はそれがどうなるかわかりません。しかし、それは機能します。

MonoのSystem.Data.dllにはP.Cにいくつかの問題があり、コンピューター名が英語ではありません。

だから、少なくともUnityプロジェクト。

お客様に、コンピューター名を英語以外に設定しないでください。

モノの人がこれらの問題を知っているかどうかはわかりません。

0
Justin Jeon