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