如何将Unity Android应用程序与MS SQL Server连接

时间:2018-11-27 17:06:34

标签: c# android sql-server unity3d

我正在尝试从Unity构建一个android应用程序以与MS SQL Server数据库连接。我发现了一些可在编辑器上使用的方法,这些方法主要基于直接从Unity连接到SQL Server。但是,当我构建android应用程序时,此方法不起作用。我只需要执行“选择”(登录)和“插入”(插入会话数据)。你们能提供一些最佳方法的提示吗?另外,我认为也许需要使用Web服务,但是我没有发现很多使用ASP.NET作为中间Web服务器的示例。

1 个答案:

答案 0 :(得分:1)

With this kind of set-up you would generally call the the unity app the "client", because it's the part of the system which the end-user uses to view and interact with the world.

您的客户端通常永远不会直接访问数据库。通常,这将代表严重的安全问题。更为典型的是,客户端将使用套接字连接与专用的多用户服务器应用程序进行通信(例如,诸如SmartFox服务器之类,或者对于MMO而言,通常是自定义书面服务器应用程序)。

更简单的数据库交互(例如服务器端计分板)也是如此,出于类似的安全原因,您的客户端永远不会直接访问数据库。相反,您的客户端(游戏)将与专门编写的服务器端脚本(例如,用PHP或ASP)进行对话,而脚本又将自己访问数据库。

因此,只有受您完全控制的服务器端程序才有权直接访问数据库,并且您的客户端(不那么受信任,因为它们在您的用户手中!)被限制为使更高的权限。通过您自己设计的API发出级别请求,仅限得分时使用“ SubmitScore”和“ RetrieveScoreboard”之类的相关命令,或者使用诸如“ MoveToLocation”,“ TakeItem”,“ Say Message”之类的东西多人RPG。

然后,此多用户服务器将处理您的世界中的交互,它将负责与后台的数据库进行交互,以从数据库中创建,读取,更新和删除信息,例如用户详细信息和持久性世界数据。

由于这个原因,您的Unity客户端永远不需要知道诸如SQL,表,记录等之类的东西的存在:-)这些都是应保留在服务器上的东西,无论是作为服务器脚本还是在多用户服务器中应用。

public void connect(){


         string connectionString =
             "Server=servername;" +
             "Database=dbname;" +
             "User ID=userid;" +
             "Password=pass;" +
             "Integrated Security=True";

         result = new List<float> ();
         resultCas = new List<DateTime> ();

         using(SqlConnection conn = new SqlConnection(connectionString))
         {
             SqlCommand c; SqlDataReader da; SqlParameter param1; SqlParameter param2; SqlParameter param3; SqlParameter param4;
              conn.Open();
             c = new SqlCommand();
             c.Connection = conn;
             c.CommandType = CommandType.StoredProcedure;
             c.CommandText = "commandtext";
             param1 = c.Parameters.Add("@identify",SqlDbType.Int);        
             param1.Value = 1;
             param2 = c.Parameters.Add("@startTime",SqlDbType.DateTime);
             param2.Value = "2010-11-10 07:45:00.000";
             param3 = c.Parameters.Add("@endTime",SqlDbType.DateTime);
             param3.Value = "2010-11-12 10:15:00.000";
             param4 = c.Parameters.Add("@args",SqlDbType.NVarChar);
             param4.Value = "I";
             da = c.ExecuteReader();
             while (da.Read())
             {
                 resultCas.Add(da.GetDateTime(0));
                 result.Add((float)da.GetDouble(1));
             }
         }
     }