none
Verbindungsaufbau zu SQL Server RRS feed

  • Frage

  • Hallo,

    ich habe auf einem Kundenrechner ein Programm installiert, das SQL Server verwendet. Bei der Installation des Programms wird angegeben, ob die Verbindung zu einer Express- oder Vollversion des SQL Servers erfolgen soll.

    Der Kunde behauptet, dass auf seinem Server nur die Express-Version installiert ist. Der Verbindungsaufbau mit Server=rechnername\instanzname und vollständigem Datenbanknamen (einschließlich Pfad), wie bei der Express-Version notwendig, geht jedoch schief.

    Erfolgt der Verbindungsaufbau mit Server=rechnername und Datenbank=datenbankname (reiner Name, ohne Pfad), dann wird die Verbindung korrekt aufgebaut. Das zeigt mir, dass der Verbindungsaufbau zu einer Vollversion des SQL Servers erfolgt. Es gibt zwar noch weitere SQL Server Express-Installationen, als Standard-Instanz wird meines Wissens jedoch dann immer die Vollversion genommen. Oder habe ich da etwas in der Dokumentation nicht verstanden?

    Wie kann man zweifelsfrei feststellen, welche SQL Server Versionen auf dem Rechner installiert sind? Das ist wohl nicht so ganz einfach. Weiß da jemand Rat?

    Beste Grüße,

    Norbert Stephan

    Donnerstag, 13. Oktober 2011 12:08

Antworten

  • Der Kunde behauptet, dass auf seinem Server nur die Express-Version installiert ist. Der Verbindungsaufbau mit Server=rechnername\instanzname und vollständigem Datenbanknamen (einschließlich Pfad), wie bei der Express-Version notwendig, geht jedoch schief.

    Erfolgt der Verbindungsaufbau mit Server=rechnername und Datenbank=datenbankname (reiner Name, ohne Pfad), dann wird die Verbindung korrekt aufgebaut. Das zeigt mir, dass der Verbindungsaufbau zu einer Vollversion des SQL Servers erfolgt.


    Hallo Norbert,

    wie Stefan schon schrieb, kannst Du anhand des Instanzennamens rein gar nichts ausmachen.

    Um es noch mal konkret zusammenzufassem: Auf einem Rechner kannst Du 0 - 1 Standardinstanz (ohne Namen) installieren und 0 - 50 benannte Instanzen und das völlig unabhängig von der eingesetzten SQL Server Edition, siehe Limitationen => Instances per Computer.

    Wenn Du im ConnectionString einen Dateinamen angibts, dann verwendest Du eine Benutzerinstanz des SQL Servers, das wiederum geht nur mit einer Express Edition und nur wenn der auf dem lokalem Rechner läuft, mit anderen Editionen oder mit Remote Instanzen geht das nicht.
    "Notwendig" ist das aber in keinster weise, Du kannst auch bei der Express Edition die Datenbank anhängen und wie bei bei Deinem Verfahren für Standard Edition nur den Datenbanknamen ansprechen.

    Um die Edition zu ermitteln solltest Du statt @@version besser die ServerProperty Funktion verwenden:

     

    SELECT SERVERPROPERTY('Edition') AS EditionDescr
          ,SERVERPROPERTY('EditionID') AS EditionId
          ,SERVERPROPERTY('EngineEdition') AS EngineEditionId
          ,@@VERSION AS VersionText 
    
    

     

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Bearbeitet Olaf HelperMVP Donnerstag, 13. Oktober 2011 15:23
    • Als Antwort vorgeschlagen Elmar Boye Freitag, 14. Oktober 2011 09:08
    • Als Antwort markiert Alex Pitulice Montag, 17. Oktober 2011 11:06
    Donnerstag, 13. Oktober 2011 15:21

Alle Antworten

  • Hallo Norbert,

    auch SQL Server Express lässt sich so installieren, dass man keinen Instanznamen angeben muss.

    Setz mal folgendes Statement auf dem Server ab:

      SELECT @@VERSION

    Dann solltest Du wissen, ob das eine Express- oder eine normale Edition ist.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 13. Oktober 2011 13:14
    Moderator
  • Hallo Stefan,

    vielen Dank für die schnelle Antwort.

    Ist bei einer solchen Installation die Eingabe eines Instanzennamens dann grundsätzlich verboten, oder ist der Instanzenname optional? Im zweiten Fall muss ja dann die Verbindung trotzdem klappen.

    Beste Grüße,

    Norbert Stephan

    Donnerstag, 13. Oktober 2011 13:33
  • Hallo Norbert,

    bei der Installation ist der Instanzname optional. Man kann einen Namen wählen, muss es aber nicht.

    Wenn man aber einen vergibt, muss man den im ConnectionString auch angeben.

     

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 13. Oktober 2011 13:51
    Moderator
  • Der Kunde behauptet, dass auf seinem Server nur die Express-Version installiert ist. Der Verbindungsaufbau mit Server=rechnername\instanzname und vollständigem Datenbanknamen (einschließlich Pfad), wie bei der Express-Version notwendig, geht jedoch schief.

    Erfolgt der Verbindungsaufbau mit Server=rechnername und Datenbank=datenbankname (reiner Name, ohne Pfad), dann wird die Verbindung korrekt aufgebaut. Das zeigt mir, dass der Verbindungsaufbau zu einer Vollversion des SQL Servers erfolgt.


    Hallo Norbert,

    wie Stefan schon schrieb, kannst Du anhand des Instanzennamens rein gar nichts ausmachen.

    Um es noch mal konkret zusammenzufassem: Auf einem Rechner kannst Du 0 - 1 Standardinstanz (ohne Namen) installieren und 0 - 50 benannte Instanzen und das völlig unabhängig von der eingesetzten SQL Server Edition, siehe Limitationen => Instances per Computer.

    Wenn Du im ConnectionString einen Dateinamen angibts, dann verwendest Du eine Benutzerinstanz des SQL Servers, das wiederum geht nur mit einer Express Edition und nur wenn der auf dem lokalem Rechner läuft, mit anderen Editionen oder mit Remote Instanzen geht das nicht.
    "Notwendig" ist das aber in keinster weise, Du kannst auch bei der Express Edition die Datenbank anhängen und wie bei bei Deinem Verfahren für Standard Edition nur den Datenbanknamen ansprechen.

    Um die Edition zu ermitteln solltest Du statt @@version besser die ServerProperty Funktion verwenden:

     

    SELECT SERVERPROPERTY('Edition') AS EditionDescr
          ,SERVERPROPERTY('EditionID') AS EditionId
          ,SERVERPROPERTY('EngineEdition') AS EngineEditionId
          ,@@VERSION AS VersionText 
    
    

     

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Bearbeitet Olaf HelperMVP Donnerstag, 13. Oktober 2011 15:23
    • Als Antwort vorgeschlagen Elmar Boye Freitag, 14. Oktober 2011 09:08
    • Als Antwort markiert Alex Pitulice Montag, 17. Oktober 2011 11:06
    Donnerstag, 13. Oktober 2011 15:21
  • Hallo Olaf,

    auch dir vielen Dank für die Antwort. Es hat mir auf jeden Fall weitergeholfen.

    Beste Grüße

    Norbert Stephan

    Freitag, 14. Oktober 2011 11:48