如何从Unity连接到数据库我想通过Unity连接到MSSQL数据库。但是,当我尝试打开连接时,出现IOException:连接丢失。我从UnityEditorDataMonolibmono2.0导入了System.Data.dll。我使用以下代码:usingUnityEngine;使用系统集合;使用System.Data.Sql;使用System.Data.SqlClient;公共类SQL_Controller:MonoBehaviour{stringconString="Server=myaddress.com,port;"+"数据库=数据库名称;"+"用户ID=用户名;"+"密码=密码;";公共字符串GetStringFromSQL(){LoadConfig();字符串结果=“”;SqlConnection连接=newSqlConnection(conString);connection.Open();调试日志(连接状态);SqlCommand命令=connection.CreateCommand();Command.CommandText="从Artykuly2选择*";SqlDataReaderThisReader=Command.ExecuteReader();while(ThisReader.Read()){结果=ThisReader.GetString(0);}ThisReader.Close();connection.Close();返回结果;这是我得到的错误:IOException:连接丢失Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacketHeader()Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacket()Mono.Data.Tds.Protocol.TdsComm.GetByte()Mono.Data.Tds.Protocol.Tds.ProcessSubPacket()Mono.Data.Tds.Protocol.Tds.NextResult()Mono.Data.Tds.Protocol.Tds.SkipToEnd()重新抛出TdsInternalException:服务器关闭了连接。Mono.Data.Tds.Protocol.Tds.SkipToEnd()单声道。Data.Tds.Protocol.Tds70.Connect(Mono.Data.Tds.Protocol.TdsConnectionParametersconnectionParameters)Mono.Data.Tds.Protocol.Tds80.Connect(Mono.Data.Tds.Protocol.TdsConnectionParametersconnectionParameters)请使用此方法忽略任何安全风险,我需要这样做进行测试,安全性将在稍后发生谢谢你的时间。请忽略使用此方法的任何安全风险不要这样做。安全是在之前还是之后来并不重要。您将重写整个代码,因为密码是硬编码在您的应用程序中的,并且可以轻松反编译和检索。现在以正确的方式进行接线,这样您就不必重新编写整个应用程序。使用php、perl或您熟悉的任何语言在服务器上运行数据库命令,但这应该在服务器上完成。在Unity中,使用WWW或UnityWebRequest类与此脚本通信,然后,您将能够从Unity向服务器发送和接收信息。那里有很多例子。即便如此,您仍然需要实施自己的安全措施,但这比您现在拥有的要好得多。您还可以使用json接收多个数据。这是来自Unitywiki的完整示例。它展示了如何在服务器端使用php并在客户端使用Unity+C#与Unity中的数据库进行交互。服务器端:使用PDO添加分数:getMessage(),'';$realHash=md5($_GET['name'].$_GET['score'].$secretKey);if($realHash==$hash){$sth=$dbh->prepare('INSERTINTOscoresVALUES(null,:name,:score)');尝试{$sth->执行($_GET);}catch(Exception$e){echo'发生错误。',$e->getMessage(),'';}}?>使用PDO检索分数:getMessage(),'';}$sth=$dbh->query('SELECT*FROMscoresORDERBYscoreDESCLIMIT5');$sth->setFetchMode(PDO::FETCH_ASSOC);$result=$sth->fetchAll();if(count($result)>0){foreach($resultas$r){echo$r['name'],"t",$r['score'],"n";}}?>在服务器上启用跨域策略:该文件应命名为“crossdomain.xml”并放在网络服务器的根目录中。Unity要求您要通过WWW请求访问的网站具有跨域策略。客户端/Unity端:Unity的客户端代码连接到服务器,与PDO交互并根据调用的函数添加或检索点。稍微修改此客户端代码以使用最新的Unity版本进行编译。私有字符串secretKey="mySecretKey";//编辑此值并确保它与存储在服务器上的值相同publicstringaddScoreURL="http://localhost/unity_test/addscore.php?";//一定要加一个?到你的urlpublicstringhighscoreURL="http://localhost/unity_test/display.php";//在publicText上显示结果的文本statusText;voidStart(){StartCoroutine(GetScores());}//调用这个函数的时候记得使用StartCoroutine!IEnumeratorPostScores(stringname,intscore){//这连接到服务器端php脚本,该脚本将把名称和分数添加到MySQL数据库中。//为它提供一个代表玩家姓名和玩家分数的字符串。stringhash=Md5Sum(name+score+secretKey);stringpost_url=addScoreURL+"name="+WWW.EscapeURL(name)+"&score="+score+"&hash="+hash;//将URL发布到站点并创建一个下载对象以获取结果。WWWhs_post=newWWW(post_url);屈服返回hs_post;//等到下载完成if(hs_post.error!=null){print("发布高分时出错:"+hs_post.error);}}//从MySQL数据库中获取分数以显示在GUIText中。//调用这个函数的时候记得使用StartCoroutine!IEnumeratorGetScores(){statusText.text="加载分数";WWWhs_get=newWWW(highscoreURL);收益回报hs_get;if(hs_get.error!=null){print("获取高分时出错:"+hs_get.error);}else{statusText.text=hs_get.text;//这是将在游戏中显示分数的GUIText。}}publicstringMd5Sum(stringstrToEncrypt){System.Text.UTF8Encodingue=newSystem.Text.UTF8Encoding();byte[]bytes=ue.GetBytes(strToEncrypt);//加密字节System.Security.Cryptography.MD5CryptoServiceProvidermd5=newSystem.Security.Cryptography.MD5CryptoServiceProvider();byte[]hashBytes=md5.ComputeHash(bytes);//将加密的字节转换回来到字符串(以16为基数)字符串hashString="";for(inti=0;i这只是如何正确执行此操作的示例如果您需要实现会话功能并关心安全性,请查看OAuth2.0协议。应该有Existinglibrary来帮助入门OAuth协议。另一种方法是在命令提示符下创建自己的专用服务器以进行通信并将其连接到unity以进行Handel多人游戏和SQL通信。通过这种方式,您可以坚持使用一种语言来创建。但是学习曲线相当以上就是C#学习教程的全部内容:HowtoconnecttothedatabasefromUnity,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——-本文收集自网络,不代表立场,如涉及侵权,请点右联系管理员删除,如需转载请注明出处:
