开发者社区 问答 正文

SQL Server与Unity的连接

我正在尝试将Unity项目连接到SQL Server。我已成功在Visual Studio 2017中连接Windows窗体应用程序。而且我认为,如果将确切的代码复制到统一脚本中,我的目标应该会实现。我已将System.Data.Dll V3.5资产导入并使用unity2018.2.1.f1。我正在使用以下脚本尝试首先打开连接。

void Start () 
{
    try
    {
        string ConnString = "Integrated Security=SSPI;" + "Initial Catalog=UnityTest;" + "Data Source=localhost;";
        SqlConnection MyConn = new SqlConnection(ConnString);
        MyConn.Open();
        Debug.Log("Connection opened !");
    }
    catch(System.Exception ex)
    {
        Debug.Log(ex.ToString());
    }
}

出现以下错误: System.Data.SqlClient.SqlException: Server does not exist or connection refused.

Mono.Data.Tds.Protocol.TdsInternalException: Server does not exist or connection refused.

System.Net.Sockets.SocketException: An address incompatible with the requested protocol was used.

at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP, Boolean requireSocketPolicy) [0x00000] in :0 at System.Net.Sockets.Socket+Worker.Connect () [0x00000] in :0 --- End of inner exception stack trace --- at Mono.Data.Tds.Protocol.TdsComm..ctor (System.String dataSource, Int32 port, Int32 packetSize, Int32 timeout, TdsVersion tdsVersion) [0x00000] in :0 at Mono.Data.Tds.Protocol.Tds..ctor (System.String dataSource, Int32 port, Int32 packetSize, Int32 timeout, TdsVersion tdsVersion) [0x00000] in :0 at Mono.Data.Tds.Protocol.Tds70..ctor (System.String server, Int32 port, Int32 packetSize, Int32 timeout, TdsVersion version) [0x00000] in :0 at Mono.Data.Tds.Protocol.Tds80..ctor (System.String server, Int32 port, Int32 packetSize, Int32 timeout) [0x00000] in :0 at Mono.Data.Tds.Protocol.TdsConnectionPoolManager.CreateConnection (Mono.Data.Tds.Protocol.TdsConnectionInfo info) [0x00000] in :0 at Mono.Data.Tds.Protocol.TdsConnectionPool.GetConnection () [0x00000] in :0 at System.Data.SqlClient.SqlConnection.Open () [0x00000] in :0 --- End of inner exception stack trace --- at System.Data.SqlClient.SqlConnection.Open () [0x00000] in :0 at DB.Start () [0x00010] in D:\UnityProjects2018\DataBaseTest1\Assets\DB.cs:15 UnityEngine.Debug:Log(Object) DB:Start() (at Assets/DB.cs:20)

展开
收起
心有灵_夕 2019-11-30 21:21:23 1069 分享 版权
阿里云 AI 助理回答

在Unity项目中直接使用System.Data.SqlClient来连接SQL Server可能会遇到一些挑战,特别是当涉及到跨平台兼容性时。错误信息表明你的Unity应用无法成功连接到SQL Server,原因可能是地址不兼容或服务器拒绝连接。

考虑到Unity的多平台特性,直接使用.NET库进行数据库操作可能不是最佳实践。一个更推荐的方法是通过Web服务作为中间层来与数据库交互。这样可以确保你的游戏或应用在任何平台上都能以相同的方式工作,并且提高了安全性。

以下是几种可行的解决方案:

  1. 创建Web API:你可以使用ASP.NET Core或者Node.js等技术搭建一个简单的Web API,该API负责处理数据库的所有读写操作。Unity应用通过HTTP请求与这个Web API通信,获取或提交数据。这种方式解耦了数据库逻辑和Unity项目,使得系统更加灵活和安全。

  2. 使用云数据库服务:阿里云提供了多种数据库服务,如RDS(关系型数据库服务)、Lindorm(针对大数据场景)等。对于Unity应用,你可以考虑利用这些云数据库服务提供的SDK或者RESTful API来实现数据交互。例如,如果你选择使用阿里云RDS,可以通过设置安全组规则允许特定IP访问,并使用合适的认证方式(如SSL连接、用户名密码或RAM角色)来保障安全。

  3. 第三方插件:虽然直接使用System.Data.SqlClient在Unity中可能遇到问题,但市场上也有一些Unity插件可以帮助你更方便地与数据库交互,比如SQLite的Unity插件,适用于那些不需要远程数据库或对实时性要求不高的场景。不过,对于需要连接SQL Server的情况,自建Web服务仍然是更通用和推荐的做法。

总之,建议采用Web服务作为中介来解决Unity与SQL Server的连接问题,这不仅解决了当前的连接问题,也为将来可能的跨平台部署打下了良好的基础。同时,结合阿里云的数据库服务和安全策略,可以进一步提升系统的稳定性和安全性。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答