我正在尝试将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)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Unity项目中直接使用System.Data.SqlClient来连接SQL Server可能会遇到一些挑战,特别是当涉及到跨平台兼容性时。错误信息表明你的Unity应用无法成功连接到SQL Server,原因可能是地址不兼容或服务器拒绝连接。
考虑到Unity的多平台特性,直接使用.NET库进行数据库操作可能不是最佳实践。一个更推荐的方法是通过Web服务作为中间层来与数据库交互。这样可以确保你的游戏或应用在任何平台上都能以相同的方式工作,并且提高了安全性。
以下是几种可行的解决方案:
创建Web API:你可以使用ASP.NET Core或者Node.js等技术搭建一个简单的Web API,该API负责处理数据库的所有读写操作。Unity应用通过HTTP请求与这个Web API通信,获取或提交数据。这种方式解耦了数据库逻辑和Unity项目,使得系统更加灵活和安全。
使用云数据库服务:阿里云提供了多种数据库服务,如RDS(关系型数据库服务)、Lindorm(针对大数据场景)等。对于Unity应用,你可以考虑利用这些云数据库服务提供的SDK或者RESTful API来实现数据交互。例如,如果你选择使用阿里云RDS,可以通过设置安全组规则允许特定IP访问,并使用合适的认证方式(如SSL连接、用户名密码或RAM角色)来保障安全。
第三方插件:虽然直接使用System.Data.SqlClient在Unity中可能遇到问题,但市场上也有一些Unity插件可以帮助你更方便地与数据库交互,比如SQLite的Unity插件,适用于那些不需要远程数据库或对实时性要求不高的场景。不过,对于需要连接SQL Server的情况,自建Web服务仍然是更通用和推荐的做法。
总之,建议采用Web服务作为中介来解决Unity与SQL Server的连接问题,这不仅解决了当前的连接问题,也为将来可能的跨平台部署打下了良好的基础。同时,结合阿里云的数据库服务和安全策略,可以进一步提升系统的稳定性和安全性。