Benutzer mit den meisten Antworten
Erstellen einer nicht-exklusiven Verbindung auf SQL-Server mit VB-NET Express 2010

Frage
-
Ich habe eine SQL-Server Datenbank installiert und VbNet 2010 Express. Das ganze unter Window-7 64 Bit. Die Datenbank meine ich müsste SQL-Server Express 2008 sein. Darüber habe ich die Adventureworks-Sample Datenbanken laden. Im MSSMS kann ich auf die Datenbank verbinden und sehe auch die Tabellen. Es ist möglich dort ein Query abzusetzen.
Nun möchte ich in Vb.Net ein Formular zur Datenanzeige auf einer dieser Tabellen erstellen. Dazu brauche ich zuerst eine Datenverbindung. In VS-Studio Vbnet mache ich also
Datenquellen > Neue Datenquelle hinzufügen
Wähle dann im PopUp-Fenster Datenbank
Entity-Datenmodell Modellinhalt auswählen: Aus Datenbank generieren
Im Dialog Datenverbindung auswählen Muss ich erst eine Datenverbindung anlegen, weil noch nicht vorhanden, also
Neue Datenverbindung… Verbindungseigenschaften
Datenquelle: Microsoft SQL Server-Datenbankdatei (SqlClient)
Name der Datenbankdatei: Hier muss ich offenbar eine mdf-Datei auswählen – das treibt mich etwas in den Wahnsinn…. Finde das ein bedenkliches Vorgehen. Ich will auch keine DB exclusiv öffnen sondern nur über eine Usersession ganz normal verbinden.
Verbindung soll über Windows-Authentifikation erfolgen
Theoretisch könnte ich nun schon auf C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA Auf AdventureWorks_Data.mdf verbinden. Aber
1. dazu habe ich keine Zugriffsrechte, was m.E. auch richtig ist
2. die Datei ist vom Datenbankserver bereits geöffnet und kann nicht vom VB.Net nochmals geöffnet werden – was im formulargesteuerten Dialog offenbar versucht wird [sic!!]
3. Versuchsweise habe ich den Server auch schon gestoppt, dann kann ich zwar auf die Datei zugreifen, aber danach kriege ich einen Fehler weil der Server nicht lauft. Impossibilé!!
Also der implizierte Weg über den Dialog Neue Verbindung erscheint mir einfach nicht der richtige. Vor Tagen schient mir so was ähnliches schon mal zu laufen. Jetzt kriege ich es aber einfach nicht mehr hin. Was noch bemerkenswert ist: Unter Erweiterte Eigenschaften im Dialogfeld Verbindungseigenschaften, wo ich versuche diese Verbindung anzulegen steht unter Datasource = .\SQLEXPRESS. Auf SSCM heisst der laufende SQL-Server unter dem die Daten installiert sind aber MSSQLSERVER. Eine andere Datasource kann man aber hier weder ändern noch sonst wie festlegen.
Wie kann ich auf die Tabellen der DB eine nicht exklusive Verbindung kriegen?
Was ich auch herausfinden möchte: Läuft bei mir jetzt MS SQL Express oder MS SQL Server (mit einer Trialperiode von dann nur noch 89 Tagen)?
mfg Othmar Lippuner
- Bearbeitet olippuner Freitag, 10. Juni 2011 15:07
Antworten
-
Ich habe inzwischen das Problem bei mir so gelöst:
Installation von Vb.Net express 2010 mit SQL Server 2008 R2 auf Windows XP professional SP3.
Die Fehlermeldung "Fehler beim Generieren einer Benutzerinstanz" tritt nun nicht mehr auf. Ich meine es gibt tatsächlich einen Interoperationsfehler wenn Vb.Net express 2010 mit SQL Server 2008 R2 auf einer Windows-7 64 Bit Umgebung installiert wird. Denke da besteht ein Fehler/Bug der nur von seitens Microsoft ursächlich korrigiert werden kann.
Jedenfalls tut nun den Datenwizard in VB.Net in Zusammenarbeit mit der DB. Formulare und Listen können mit dem Wizard erzeugt werden. Das die Userinstanzen ständig die DB korrumpieren wenn mit zwei Sessions gleichzeitig auf die DB zugegriffen wird, das Problem besteht weiterhin und liegt wohl im Design. War von MS so gewollt, das ganze Konzept mit den Benutzerinstanzen wird aber von MS auch künftig wie bereits angekündet aufgegeben.
Wenn vorher eine Datensicherung gemacht wurde können Struktur und Dateninhalt jeweils retabiliert werden. Eine längere Aufrechterhaltung der Datenkonsistenz über eine längere Transaktionskette ist wohl so aber schwierig, von MS aber ggf. auch so gewollt. Man kann das aber auch als Schikane der SOHO-Entwickler betrachten. Die 4 GB Grenze der DB würde ja durchaus reichen um für MS den Umsatz zu sichern, wenn es in dann in die produktiven DB-Anwendungen beim Enduser geht.
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 16. August 2011 10:54
Alle Antworten
-
Hallo Othmar,
da wird im Dialog wohl eine Benutzerinstanz erzeugt. Das ist in den allermeisten Fällen die schlechteste Variante.
Leg einfach mal per Code eine Verbindung an und schau, ob das funktioniert. Den Weg über die .mdf Datei vergiss mal wieder schnell.
Dim ConnectionString As String = "SERVER=127.0.0.1;UID=<Username>;PWD=<Passwort>;DATABASE=<Datenbankname>;" Dim Command As String = "SELECT * FROM <Tabelle>" Dim Connection As New SqlConnection( ConnectionString ) Connection.Open() ... Connection.Close() Connection.Dispose()
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 -
Hallo Stefan
danke für Deinen Beitrag. Ich will nun aber eigentlich im Visual Studio d.h im MS Visual Basic 2010 Express die Datenquelle verbunden haben, also keine direkte und alleinige Verbindung aus dem Code heraus. Motivation: aus der Hierarchie der Datenset-Liste im Datenquellenfenster kann ich mir schnell und einfach mittels Drag&Drop des unterlegten Formularwizard bedienen.
Inzwischen das Ding dann irgendwie doch verbunden. In allen nachfolgenden Projekten verbindet es nun plötzlich auch. Da irgendwie hintenrum ein AdventureWorksDataset_Connectionstring angelegt wurde. Geklappt hat es nachdem ich im Dialog Neue Datenquelle ... Neue Verbindung unter Erweiterte Verbindung das Attribute Datasource=.\SQLEXPRESS durch die einzig möglich andere Option . ersetzt habe. Allenfalls bin ich jetzt lokal verbunden und auf eine Defaultinstanz AdventureWorks. Ich wüsste jetzt jedenfalls nicht wie ich z.B. auf die Tabellen von AdventureWorksLT verbinden kann.
Ob das nun eine Benutzerinstanz ist oder nicht weiss ich nicht. Irgendwo habe ich's auch gelesen, dass eine Benutzerinstanz nicht die beste Zugriffsmethode ist, kenne mich da aber noch zu wenig aus.
Ist allenfalls Vb.Net Express von Micorsoft so verschraubt, dass nur auf SQLExpress oder auf die lokale Defaultinstanz zugegriffen werden kann? Für mich stellt sich immer noch die Frage, ob die Sampledatenbanken nur unter SQL SERVER 20xx TRIAL oder unter SQL SERVER 2008 EXPRESS laufen. Wie kann ich das feststellen?
mfg Othmar Lippuner -
Es gibt nun doch Kollateralschäden. Im MSSMS ist Adventureworks nicht mehr aufzuklappen, offenbar nicht mehr verbunden. Im SSCM stoppe ich also die DB und starte sie dann neu. Den SSCM habe geschlossen und starte neu. Sodann erhalte ich die bündige Aussage:
Fehler beim Abrufen von Daten für diese Anforderunge ()Microsoft.SQLServer.Management.SDK.SFC)
Zusätzliche Informationen: Mindestens eine Datei stimmt nicht mit der primären Datei der Datenbank überein. Falls Sie eine Datenbank anzufügen versuchen, wiederholen Sie den Vorgang mit den richtigen Dateien. Falls essich um eine vorhandene Datenbank handelt, ist die Datei möglicherweise beschädigt und sollte von einer Sicherung wiederhergestellt werden (Microsoft SQL Server, Fehler 5173)
Nicht gerade Tool - Glücklicherweise ein Entwicklungssystem und bisher keine Nutzdaten auf der Datenbank. Trotzdem 3-4 Stunden Arbeit für die Katze. Muss wohl die ganzen DB' normals neu installieren.
Das ungute Gefühl als ich meinem User die Rechte für Vollzugriff auf die MDF-Dateien erteilt hatte, hat sich damit bewahrheitet. Finde die Dialogführung in den Verbindungsassistenten nach wie vor gefährlich und ihreführend.
mfg Othmar Lippuner -
Datenbank ist deinstalliert und neu installiert worden. Alle meine Versuche und guten Ratschläge aus dem Forum haben bisher nicht zum Ziel geführt:
In VB-Net soll eine Datasource auf die SQL-Server Express 2008 Datenbankinstanz AdventureWorks_Data.mdf via eine Benutzerinstanz verbunden werden.
Ich habe das Vorgehen nirgends hinreichend dokumentiert gefunden. Alle Versuche sind bislang gescheitert – auch nach einigen richtungsweisenden Hinweisen hier aus dem Forum, die aber bis dato auch nicht zum Erfolg geführt haben.
Eine sinnvolle Dialogfolge im VB.NET Express 2010 wäre zwar vorhanden. Führt aber wegen Fehlern nicht zum Ziel.
Das Vorgehen bis zum Eintreffen obigen Fehlers war:
Einstellungen unter ERWEITERT
Verbindungsassistent - Erweiterte Eingaben
hier wird wie gefordert USERINSTANCE=TRUE und INTGRATED SECURITY=TRUE gesetzt. In der Folge führt dies zum oben gezeigten Fehler.
Wer hat eine ähnliche Konfiguration bei sich wo es funktioniert? Ich kann mir nicht vorstellen, dass das generell nicht geht. Meine User-Zufriedenheit mit den beiden EXPRESS-Produkten hat derzeit ein Allzeittiefstwert erreicht.
Der Meldungstext
"Fehler beim Generieren einer Benutzerinstanz von SQL Server aufgrund eines Fehlers beim Starten des Prozesses für die Benutzerinstanz"
deutet an, dass das System versucht ein Benutzerinstanz aufzubauen, dann jedoch mit einem Fehler scheitert, der aber leider nur mit sehr allgemeinem Meldungstext signalisiert wird.
Besteht allenfalls seitens Microsoft ein Problem, welches in den Besonderheiten meiner Installation gründet? Ich arbeite mit Windows-7 professional 64 Bit, könnte hier ein Kompatibilitätsproblem zu 32 Bit vorliegen?
Die Meldung aus dem Jahr 2007 zeigt, das da die Problemursache liegen könnte:
http://support.microsoft.com/kb/921498/en-us
Error message when you try to create a database connection to SQL Server Express in a Windows Server 2003-based terminal server session: "Failed to spawn a user instance of SQL Server"
Ansonsten bin ich nur auf ähnliche Problemmeldungen gestossen, die aber alle bis dato ungelöst sind.
z.B:
http://www.vbarchiv.net/forum/id24_i10109t9893_vbnet-express-verbindung-mit-sql-server.html
Da die Dialoge zum Aufbau einer neuen Verbindung über eine Benutzerinstanz alle vorhanden sind, und Microsoft selber sowohl VB.NET EXPRESS wie auch SQL SERVER EXPRESS 2008 zu Ausbildungs- und Lernzwecken zur Verfügung stellen, kann ich mir nicht vorstellen, dass die fehlende Verbindungsfähigkeit zwischen den beiden Komponenten beabsichtigt ist. Vielmehr scheint ein Fehler vorzuliegen.
In Beiträgen zum SQL-Seerver 2005 bin ich auch auf Hinweise gestossen, dass die Benutzerinstanzen im MSSMS(Microsoft SQL Server Management Studio) erstellt werden müssen. Ich sehe jedoch keine solche Funktion als Möglichkeit im MSSMS von 2008. Ich denke die Serverinstanzen sollten automatisch generiert werden. Im Projektexplorer von VB.NET erscheint sogar ein Eintrag "AdventureWorks_Data.mdf" dann stürzt aber der Verbindungsaufbau mit genanntem Fehler ab. Folglich wird auch keine Verbindung auf die Benutzerinstanz gespeichert. In Eigenschaften > Verbindungen fehlt in der Folge der Verbindungs-Eintrag, der vom Wizard-Dialog hätte erstellt werden sollen.
mfg Othmar Lippuner -
Konzepte sind gut, nur sollten sie auch funktionieren. Es trifft keiner der Fehlergründe zu die von Elmar Boyle vermutet werden:
SQLEXPRESS ist installiert und ist am laufen:
http://cid-6e27e559358c184d.photos.live.com/self.aspx/SQL%5E_SERVER%20EXPRESS%202008/Bild4.png
Userinstanzen sind erlaubt (default-Einstellung)
Bei wem funktioniert die Kombination Vb.Net express 2010 mit Wizardanbindung Datenquellen auf einer SQL EXPRESS 2008 Instanz? Wenn ja, welche Betriebssystemversion? Windows-7 32 Bit? Windows-7 64 Bit?
Hier die gewünschten Versionsinformationen der betroffenen DB:
SELECT SERVERPROPERTY('productversion') productversion , SERVERPROPERTY ('productlevel') productlevel, SERVERPROPERTY ('edition') edition
bringt die Spalten
10.50.1600.1; RTM; Express Edition with Advanced Services (64-bit)
Die primäre Datenbankinstanz ist installiert unter dem DefaultPfad der SQL-EXPRESS Datenbankinstallation:
C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL
ich meine das ist schon richtig so. Der Server ist bei mir lokal installiert, betrachte es als einen Entwicklungsrechner. Das Problem ist das die sekundäre Datenbankkopie für die Userinstanz nicht vorhanden ist. Frage ist ob ich diese anlegen muss?
Ich meine Nein, ansonsten fehlt mir die Information über das konkrete Vorgehen hierzu. In der MS-Doku ist unter SQL-Server Express 2008 kein Hinweis vorhanden, das hier etwas manuell kopiert oder geclont werden sollte. Ich meine die Userinstanz müsste automatisch angelegt werden, wenn ich über den Wizard die Verbindung einrichte. Da passiert ja auch etwas in der Richtung, wird aber dann mit der Fehlermeldung abgebrochen...
Die Abfrage
SELECT * FROM sys.dm_os_child_instances
liefert zu keinem Zeitpunkt den Hinweis auf das Vorhandensein einer Userinstanz.
mfg Othmar Lippuner
- Bearbeitet olippuner Dienstag, 14. Juni 2011 17:06
-
Im ganzen MSDN-Artikel "Benutzerinstanzen für Nichtadministratoren" ist mit keiner Silbe erwähnt wie und vom wem die Benutzerinstanzen angelegt werden.
Nach allem was ich von den ablaufenden Systemvorgängen und der Fehlermeldung verstanden habe, werden diese vom System selber angelegt und verwaltet, eben z.B. indem den Benutzer auf der IDE eine Datenverbindung anlegt, meine ich sollte ein solche Benutzerinstanzen gestartet bzw. angelegt werden.
Das würde dann auch erklären, warum zwar das Konzept Benutzerinstanz erklärt wird, nicht aber wie man eine anlegt. Ich meine sie werden automatisch angelegt wenn man im Connectionstring das Attribut USERINSTANCE=1 setzt.
Ich glaube gerne, dass bei Elmar SQL Server Express auf Windows 7 der Version 2008 R2 mit den Advanced Services funktioniert. Tut es bei mir auch.
Meine Frage aber lautet:
>>Bei wem funktioniert die Kombination "Vb.Net Express 2010" mit Wizardanbindung Datenquellen auf einer "SQL Express Edition 2008 with Advanced Services (64-bit)" Instanz auf einer Windows-7 64 Bit Umgebung?
Das Problem mit der fehlenden Userinstanz tritt auf, während ich mit Vb.Net express 2010 auf die SQLEXPRESS-Datenbank eine Verbindung am aufbauen bin.
Der Fehler wird von Vb.Net express 2010 ausgelöst. Offenbar wird vom System bzw. vom VB-NET-Express beim beschriebenen Vorgehen via Datenverbindungsassistenz versucht eine Benutzerinstanz anzulegen, was dann misslingt.
Meine Frage ist nach wie vor unbeantwortet, das Problem noch offen.
mfg Othmar Lippuner
- Bearbeitet olippuner Dienstag, 14. Juni 2011 19:22
-
Ich habe inzwischen das Problem bei mir so gelöst:
Installation von Vb.Net express 2010 mit SQL Server 2008 R2 auf Windows XP professional SP3.
Die Fehlermeldung "Fehler beim Generieren einer Benutzerinstanz" tritt nun nicht mehr auf. Ich meine es gibt tatsächlich einen Interoperationsfehler wenn Vb.Net express 2010 mit SQL Server 2008 R2 auf einer Windows-7 64 Bit Umgebung installiert wird. Denke da besteht ein Fehler/Bug der nur von seitens Microsoft ursächlich korrigiert werden kann.
Jedenfalls tut nun den Datenwizard in VB.Net in Zusammenarbeit mit der DB. Formulare und Listen können mit dem Wizard erzeugt werden. Das die Userinstanzen ständig die DB korrumpieren wenn mit zwei Sessions gleichzeitig auf die DB zugegriffen wird, das Problem besteht weiterhin und liegt wohl im Design. War von MS so gewollt, das ganze Konzept mit den Benutzerinstanzen wird aber von MS auch künftig wie bereits angekündet aufgegeben.
Wenn vorher eine Datensicherung gemacht wurde können Struktur und Dateninhalt jeweils retabiliert werden. Eine längere Aufrechterhaltung der Datenkonsistenz über eine längere Transaktionskette ist wohl so aber schwierig, von MS aber ggf. auch so gewollt. Man kann das aber auch als Schikane der SOHO-Entwickler betrachten. Die 4 GB Grenze der DB würde ja durchaus reichen um für MS den Umsatz zu sichern, wenn es in dann in die produktiven DB-Anwendungen beim Enduser geht.
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 16. August 2011 10:54