2016-07-21 2 views
1

Ich habe noch keine Rückmeldung von diesem Beitrag in Antwortforen erhalten, daher poste ich hier, um die Sichtbarkeit zu erweitern.Unity 5.3.5f und SQL Server 2008 R2: 'eine bestehende Verbindung wurde vom Remote-Host zwangsweise geschlossen'

Es scheint, dass diese Frage ein paar Mal in den Foren der Einheit gestellt wurde, aber keine Antworten, die meine Probleme behoben haben. Ich laufe Einheit 5.3.5f, SQL Server 2008 R2 Express (war SQL Server 2016 ausgeführt, aber gelesen, dass die Mono-DLLs nur bis zu SQL Server 2008 kompatibel sind). Ich habe die richtigen Monodls in meinem Assets-Ordner richtig referenziert und in meinem Projekt erstellt. Ich führe die Datenbank lokal aus. Ich kann mich gut mit SQL Server Management Studio und Visual Studio 2015 verbindet auch gut damit. Ich habe die Firewall komplett fallen gelassen. Im Moment versuche ich nur, es innerhalb der Einheitsidee zum Laufen zu bringen. Ich habe auch überprüft, dass eingehende Verbindungen in SQL Server Management Studio zulässig sind und TCP/IP im SQL Server-Konfigurations-Manager aktiviert ist.

Darüber hinaus gibt es, soweit ich gesehen habe, keine Dokumentation für Datenbankverbindungen.

Mein Code:

public string RetrieveTestData(string query) { string sqlConnectionString = "Server=zzzz\\SQLEXPRESS2008;" + "Database=mydb;" + "User ID=sa;" + "Password=mypass;"; 

Debug.Log(sqlConnectionString); 
SqlConnection con = new SqlConnection(sqlConnectionString); 

try 
{ 
    con.Open(); // error thrown here 
    SqlCommand cmd = new SqlCommand(query, con); 
    var fubar = cmd.ExecuteScalar(); 
    con.Close(); 

    return fubar.ToString(); 
} 
catch (Exception ex) 
{ 
    Debug.Log(ex.StackTrace); 
    throw; 
} 

public void TestQuery() 
{ 
    Debug.Log(RetrieveTestData("select top 1 * from dbo.Weapon")); 
} 

Mein Fehler:

SocketException: An existing connection was forcibly closed by the remote host.

Stack trace:

at System.Net.Sockets.Socket.ReceiveFrom_nochecks_exc (System.Byte[] buf, Int32 offset, Int32 size, SocketFlags flags, System.Net.EndPoint& remote_end, Boolean throwOnError, System.Int32& error) [0x00000] in :0 at System.Net.Sockets.Socket.ReceiveFrom_nochecks (System.Byte[] buf, Int32 offset, Int32 size, SocketFlags flags, System.Net.EndPoint& remote_end) [0x00000] in :0 at System.Net.Sockets.Socket.ReceiveFrom (System.Byte[] buffer, System.Net.EndPoint& remoteEP) [0x00000] in :0 at System.Net.Sockets.UdpClient.Receive (System.Net.IPEndPoint& remoteEP) [0x00000] in :0 at System.Data.SqlClient.SqlConnection+SqlMonitorSocket.DiscoverTcpPort (Int32 timeoutSeconds) [0x00000] in :0 at System.Data.SqlClient.SqlConnection.DiscoverTcpPortViaSqlMonitor (System.String ServerName, System.String InstanceName) [0x00000] in :0 at System.Data.SqlClient.SqlConnection.ParseDataSource (System.String theDataSource, System.Int32& thePort, System.String& theServerName) [0x00000] in :0 at System.Data.SqlClient.SqlConnection.Open() [0x00000] in :0 at (wrapper remoting-invoke-with-check) System.Data.SqlClient.SqlConnection:Open() at Assets.Scripts.Data.DBBase.RetrieveTestData (System.String query) [0x00013] in C:\Development\Unity\twistedshadowsgame\TwistedShadows\Assets\Scripts\Data\DBBase.cs:23 UnityEngine.Debug:Log(Object) Assets.Scripts.Data.DBBase:RetrieveTestData(String) (at Assets/Scripts/Data/DBBase.cs:35) Assets.Scripts.Data.DBBase:TestQuery() (at Assets/Scripts/Data/DBBase.cs:43) Assets.Scripts.Data.DBBase:Start() (at Assets/Scripts/Data/DBBase.cs:48)

Alle Hilfe wird sehr geschätzt, da dies der einzige Punkt ist alles meine Fortschritte halten. Wenn ich nicht etwas gepostet habe oder ich woanders schreiben muss, lass es mich wissen. Ich hätte dafür lieber keinen separaten Restdienst. Ich bin zuversichtlich, dass die Einheit die Fähigkeiten hat und von dem was ich lese, dass es aussieht, als wäre es von vielen anderen erfolgreich gemacht worden.

danke im voraus! Ryan

Antwort

0

Ziemlich "spät zum Spiel" auf diesem, aber ich fand die Antwort vor einiger Zeit. Das richtige Entwurfsmuster dient zum Schreiben eines Dienstes, der die Datenbankanrufe tätigt und Unity-Aufrufe an diesen Dienst sendet. Für alle anderen, die versuchen, Daten aus einer db zu ziehen, um ein Objekt in der Einheit zu füllen, ist dies das bevorzugte Muster.

danke :)

Verwandte Themen