SQL Server 与 Unity 的连接

Posted

技术标签:

【中文标题】SQL Server 与 Unity 的连接【英文标题】:SQL Server connection with Unity 【发布时间】:2019-11-30 11:08:43 【问题描述】:

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

void Start () 

    try
    
        string ConnString = "Data Source=DESKTOP-PVB5MHG;Initial Catalog=UnityTest;User ID=legend;Password=legend";
        SqlConnection MyConn = new SqlConnection(ConnString);
        MyConn.Open();
        Debug.Log("Connection opened !");
    
    catch(System.Exception ex)
    
        Debug.Log(ex.ToString());
    

System.Data.SqlClient.SqlException:服务器不存在或 拒绝连接。

Mono.Data.Tds.Protocol.TdsInternalException: 服务器不存在或连接被拒绝。

System.Net.Sockets.SocketException:使用了与请求的协议不兼容的地址。

在 System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP, Boolean requireSocketPolicy) [0x00000] in :0 在 System.Net.Sockets.Socket+Worker.Connect () [0x00000] in :0 --- 内部异常堆栈跟踪结束 --- 在 Mono.Data.Tds.Protocol.TdsComm..ctor (System.String 数据源,Int32 端口,Int32 packetSize,Int32 超时,TdsVersion tdsVersion) [0x00000] in :0 在 Mono.Data.Tds.Protocol.Tds..ctor (System.String 数据源,Int32 端口,Int32 packetSize,Int32 超时,TdsVersion tdsVersion) [0x00000] in :0 在 Mono.Data.Tds.Protocol.Tds70..ctor (System.String 服务器,Int32 端口, Int32 packetSize, Int32 timeout, TdsVersion version) [0x00000] in :0 在 Mono.Data.Tds.Protocol.Tds80..ctor (System.String server, Int32 port, Int32 packetSize, Int32 timeout) [0x00000] 在 :0 处 Mono.Data.Tds.Protocol.TdsConnectionPoolManager.CreateConnection (Mono.Data.Tds.Protocol.TdsConnectionInfo 信息)[0x00000] in :0 at Mono.Data.Tds.Protocol.TdsConnectionPool.GetConnection() [0x00000] in :0 在 System.Data.SqlClient.SqlConnection.Open () [0x00000] in :0 --- 内部异常堆栈结束 跟踪 --- 在 System.Data.SqlClient.SqlConnection.Open () [0x00000] 在 :0 在 DB.Start () [0x00010] 中 D:\UnityProjects2018\DataBaseTest1\Assets\DB.cs:15 UnityEngine.Debug:Log(Object) DB:Start()(在 Assets/DB.cs:20)

【问题讨论】:

连接到非嵌入式数据库通常不是您想在使用 Unity 制作的各种应用程序中直接执行的操作。通常,您将服务创建为“数据层”并对其进行 http 调用,而不是直接连接到数据库。 我相信集成安全仅适用于 Windows。尝试在 SQL Server 上创建一个用户并将其添加到您的连接字符串中。另外,您确定 SQL Server 正在机器上运行吗?不用更换本地主机吗? @tvdias first,感谢您的评论。我刚刚创建了一个用户并更改了连接字符串。再次在视觉工作室中运行良好,但在统一时出现同样的错误。我编辑了代码,你能再检查一下吗 虽然我们不确定这里的大局,但我强烈建议您不要将 SQL 连接数据直接嵌入到应用程序中,而让所有客户端直接连接到数据库。 【参考方案1】:

由于 Mono 的限制,您不能在 Unity 中使用 ODBC。请改用http://github.com/dotnet/SqlClient。

您的具体错误与在 Mono 中解析机器名称的方式与 WinForms 时代的 .Net 框架的古老版本不同有关。 DESKTOP-PVB5MHG 将不是有效的 DNS 名称,而 Mono 仅使用 DNS 来解析 Data Source

【讨论】:

以上是关于SQL Server 与 Unity 的连接的主要内容,如果未能解决你的问题,请参考以下文章

unity3d怎么连接sql server数据库

unity3D Socket连接C#server出现unity3D编辑器再次启动连接 unity3D编辑器马上卡死

Unity连接Sql数据库(PC端)

用C#语言实现与SQL server的连接并实现增删改查的功能

vs 或 Sql server2012连接Sql server时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误

C#与SQL Server建立连接出错