SQL Verbindung zu einem Remote-SQL-Server

  • Hallo,

    ich werke noch immer an meinem Programm und alles fuktioniert wunderbar, nicht zuletzt durch eure Hilfe!

    Momentan rufe ich Daten aus einer lokalen SQLEXPRESS Datenbank ab und schreibe diese in ein Array. Im Programm arbeite ich dann mit diesen Daten. Ist auch alles wunderbar, wollte die Datenbanken aber nun auf einen Server im Unternehmen legen damit auch meine Kollegen darauf zugreifen können. Also habe ich die Datenbanken umgelegt und muss mich nun mit dem remote Server verbinden. Das ist aber jetzt mein Problem. Was lokal einwandfrei funktioniert geht mit dem remote Server nicht mehr.

    Folgendermaßen wird die Verbindung aufgebaut:

    [autoit]

    $adCN = ObjCreate("ADODB.Connection")
    $adCN.Open("DRIVER={SQL Server};SERVER=" & $sql_server & ";DATABASE=" & $sql_db & ";uid=" & $sql_user & ";pwd=" & $sql_pass & ";")
    $Kunden_Abfrage = $adCN.Execute("SELECT * FROM Kunden;")

    [/autoit]

    Lokal habe ich für die Variable $sql_server meinen Computernamen z.B. VISTA-PC

    Für den remote Server muss ich aber noch die Instanz angeben ... also so: Server1\SQLEXPRESS

    Ich denke das Problem liegt an der Kombination mit dem Backslash, weiß aber nicht wirklich was ich da versuchen soll, hat einer eine Idee?


    Gruß

    nasgul

  • klar dafür sind ja SQL Benutzer und der Authentifizierungmodus

    alternativ wäre sonst die Windowsauthentifizierung, dan mus der User aber komplet angegeben werden(FQDN)

    und muss auch expliziet beim Server eingetragen werden (unter Sicherheit/Benutzer) Ausnahme local admin ;)

    Es gibt hier eine sql.au3 zum Download damit kannman sich auf jeden Fall an remote Server anmelden (getestet mit SQL Auth.)

    Spoiler anzeigen
    [autoit]

    ;SQL UDF
    #cs
    # # # # # # # # # # # # # # #
    # #
    # Microsoft SQL Function #
    # Written by Aiden #
    # Version 0.1 Beta #
    # #
    # # # # # # # # # # # # # # #
    #ce
    #cs
    Name der Funktion: _SQLCon
    Beschreibung: Stellt eine Verbindung zu einem Microsoft SQL Server her.
    Beispiel: $sql = _SQLCon(127.0.0.1, user, pass, MyDB)
    #ce
    Func _SQLCon($scIP, $scUser, $scPass, $scDB)
    $sqlCon = ObjCreate("ADODB.Connection")
    $sqlCon.Open("Provider=SQLOLEDB; Data Source=" & $scIP & "; User ID=" & $scUser & "; Password=" & $scPass & "; database=" & $scDB & ";")
    Return $sqlCon
    EndFunc
    #cs
    Name der Funktion: _SQLQuery
    Beschreibung: Setzt eine Abfrage an eine Datenbank des Microsoft SQL Servers ab.
    Beispiel: _SQLQuery($sql, "INSERT INTO (id, name, age) VALUES (1, admin, 55)")
    #ce
    Func _SQLQuery($iSQLCon, $iQuery)
    If IsObj($iSQLCon) Then
    Return $iSQLCon.execute($iQuery)
    EndIf
    EndFunc
    #cs
    Name der Funktion: _SQLEnd
    Beschreibung: Beendet die Verbindung zum Microsoft SQL Server
    Beispiel: _SQLEnd()
    #ce
    Func _SQLEnd($sqlCon)
    If IsObj($sqlCon) Then
    $sqlCon.close
    EndIf
    EndFunc

    [/autoit]

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Hi,
    kannst du denn die sql.au3 für deine Zwecke verwenden?

    Ich weis z.B. das du bei Mysql extra sagen muß das der User Root von einer entfernten Maschine aus eingeloggt werden kann.

    MfG
    Der_Doc

  • hallo leute,

    sry das ich jetzt erst wieder schreibe, war aber beruflich unterwegs und konnte nicht reinschauen.

    also mein problem besteht nicht in der benutzeranmeldung am remote-sql-server. wie man anmeldungen im sql server erstellt ist auch keine problem, habe ich schon oft gemacht. ich habe mir einen neuen benutzer angelegt und kann mich ja auch per dsn mit dem sql server verbinden, aber wenn ich den hier angegebenen code verwende geht es nicht. wenn ich Data Source="lokalerserver" verwende dann funktionier es auch. wenn ich Data Source="remoteserver\sqlexpress" verwende scheint es aber nicht zu funktionieren. ich vermute das es an der benannten instanz liegt, ich habe aber keinen vollwertigen sql-server zur verfügung, sondern nur eine express version. jetzt habe ich mir gedacht das ich das vlt. mit einer dsn mache, weiß einer wie das der aufruf in autoit aussehen muss?

    gruß

    nasgul

  • Hi,
    ich meine das es mit der Instanz zutun hat. Vieleicht hilft dir ja das weiter.

    Spoiler anzeigen



    Galileo Computing. Wissen, wie’s geht.


    Zum Buch Das Programmierhandbuch SQL Server 2005
    25.3.3 Die Verbindung mit einer bestimmten SQL Server-Instanz aufbauen Nach oben Nach unten

    Befindet sich der SQL Server auf dem lokalen Rechner und beabsichtigen Sie, auf die Beispieldatenbank Northwind zuzugreifen, könnte die Verbindungszeichenfolge wie folgt lauten:

    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Data Source=(local);" +
    "Initial Catalog=Northwind;" +
    "Integrated Security=sspi";

    Data Source beschreibt den Rechner, auf dem sich die laufende SQL Server-Instanz befindet. Hier können Sie den Rechnernamen und eine TCP/IP-Adresse eintragen. Handelt es sich dabei um den lokalen Rechner, dürfen Sie anstatt des Rechnernamens auch (local), localhost oder einfach nur einen Punkt angeben – die beiden letztgenannten allerdings ohne runde Klammern.

    Auf einem Computer können durchaus mehrere Instanzen von SQL Server installiert sein. Das Codefragment oben greift auf die so genannte Standardinstanz zu. Möchten sie auf eine andere, benannte Instanz zugreifen, geben Sie zuerst den Rechnernamen und darauf folgend einen Backslash (\) an. Dahinter folgt die Angabe der SQL Server-Instanz. Wollen Sie sich beispielsweise mit der Instanz SQLExpress auf der lokalen Maschine verbinden, sieht das Data Source-Attribut wie folgt aus:

    Data Source=.\\SQLExpress

    Hier sind zwei Backslashs notwendig, da C# einen einfachen Backslash als Escapesequenz interpretiert. Alternativ können Sie auch vor der Zeichenfolge das Zeichen @ setzen. Hinter Initial Catalog ist die Datenbank angegeben, zum Schluss folgen noch Informationen zur Authentifizierung.

    Gleichwertig können Sie auch dem parametrisierten Konstruktor des Connection-Objekts die Verbindungszeichenfolge übergeben:

    SqlConnection con = new SqlConnection("Data Source=.;" +
    "Initial Catalog=Northwind;" +
    " Integrated Security=sspi");

    Sie müssen nicht unbedingt alle Attribute verwenden. Das Attribut Packet Size wird beispielsweise nicht benutzt. Somit werden alle Daten auf der Verbindung in 8192 Byte großen Paketen verschickt. Müssen große Datenmengen vom Server geladen werden, zum Beispiel Bilder, können größere Pakete die Leistung durchaus deutlich steigern.
    Quelle:http://www.galileocomputing.de/katalog/buecher/htmlleseproben/gp/htmlprobID-104</a>

    Ich meine nen Kumpell hat das mal gemacht. Werde ihn mal fragen und dann posten was er gesagt hat.

    MfG
    Der_Doc

  • hmm, kann es evtl. am backslash liegen?

    ich habe jetzt erstmal was geschrieben und es scheint eine dsn-verbindung zu nutzen. da ich hier keinen remote-sql-server laufen habe, werde ich es erst morgen auf der arbeit testen können. ich schreib dann wieder ...

    gruß

    nasgul