Discussion:
CREATE DATABASE Zugriff verweigert
(zu alt für eine Antwort)
Peter Haus
2008-05-15 18:30:33 UTC
Permalink
Hallo NG

Ich habe ein Problem, wozu ich keine Erklärung finde.

Mit CREATE DATABASE möchte im Programm eine Datenbank auf dem
SQL Server anlegen.
Das geht auch oft. Jedoch auf einigen PCs nicht, die Administrator
Rechte sind für den Benutzer vorhanden.

Diese Meldung erscheint:
Fehler bei CREATE DATABASE. Einige angezeigte Dateinamen konnten
nicht erstellt werden.
Bei CREATE FILE wurde beim versuch, die physikalische Datei
C:\Programm\XY\MyProg\DB\DbFile.mdf zu öffnen oder zu erstellen,
der Betriebsystemfehler 5 (Zugriff verweigert) erkannt.

Hat jemand eine Idee, an was das liegt?

Danke. Gruss
Peter
Stefan Falz [MVP]
2008-05-15 18:54:56 UTC
Permalink
Hallo Peter,
Post by Peter Haus
Das geht auch oft. Jedoch auf einigen PCs nicht, die Administrator
Rechte sind für den Benutzer vorhanden.
Mit welchem Account wird denn der SQL Server Dienst ausgeführt?
Post by Peter Haus
Fehler bei CREATE DATABASE. Einige angezeigte Dateinamen konnten
nicht erstellt werden.
Bei CREATE FILE wurde beim versuch, die physikalische Datei C:\Programm\XY\MyProg\DB\DbFile.mdf zu öffnen oder zu erstellen,
der Betriebsystemfehler 5 (Zugriff verweigert) erkannt.
Hat jemand eine Idee, an was das liegt?
Naja, steht doch da: Zugriff verweigert -> Berechtigungsproblem.
Ich geh mal davon aus, dass dem Account, der den Dienst ausführt,
die Rechte in deinem Anwendungsverzeichnis fehlen. Ich persönlich
würde die Datenbank eh im Standardpfad des DBMS anlegen, nicht im
Anwendungsverzeichnis.
--
Tschau, 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
Peter Fleischer
2008-05-15 19:22:23 UTC
Permalink
Post by Stefan Falz [MVP]
Post by Peter Haus
Das geht auch oft. Jedoch auf einigen PCs nicht, die Administrator
Rechte sind für den Benutzer vorhanden.
Mit welchem Account wird denn der SQL Server Dienst ausgeführt?
Hi Stefan,
bei Nutzung von AttachDbFilename ist der SQL Server Dienst erst einmal
uninteressant. Auf die Datei wird mit dem Nutzer zugegriffen, unter dem das
Programm läuft.
Post by Stefan Falz [MVP]
Post by Peter Haus
Fehler bei CREATE DATABASE. Einige angezeigte Dateinamen konnten
nicht erstellt werden.
Bei CREATE FILE wurde beim versuch, die physikalische Datei
C:\Programm\XY\MyProg\DB\DbFile.mdf zu öffnen oder zu erstellen,
der Betriebsystemfehler 5 (Zugriff verweigert) erkannt.
Hat jemand eine Idee, an was das liegt?
Naja, steht doch da: Zugriff verweigert -> Berechtigungsproblem.
Genau so ist es. Man kann den Fehler problemlos reproduzieren, wenn man dem
Nutzer den Zugriff verweigert.
Post by Stefan Falz [MVP]
Ich geh mal davon aus, dass dem Account, der den Dienst ausführt,
die Rechte in deinem Anwendungsverzeichnis fehlen.
Nein.
Post by Stefan Falz [MVP]
Ich persönlich
würde die Datenbank eh im Standardpfad des DBMS anlegen, nicht im
Anwendungsverzeichnis.
Das ist für Dateien, die temporär angehängt werden, ist der Standardpfad
eigentlich das Programmverzeichnis.
--
Viele Gruesse

Peter
Stefan Falz [MVP]
2008-05-15 21:36:55 UTC
Permalink
Hallo Peter,
bei Nutzung von AttachDbFilename ist der SQL Server Dienst erst einmal uninteressant. Auf die Datei wird mit dem Nutzer
zugegriffen, unter dem das Programm läuft.
er verwendet aber CREATE DATABASE und das wiederum läuft mit den Rechten
des Diensts (IMHO). Es sei denn, die NTLM Authentifizierung wird über den
SQL Server ins OS durchgereicht. Kann ich mir aber hierbei nicht vorstellen.
Post by Stefan Falz [MVP]
Ich geh mal davon aus, dass dem Account, der den Dienst ausführt,
die Rechte in deinem Anwendungsverzeichnis fehlen.
Nein.
Seh ich schon so.
Das ist für Dateien, die temporär angehängt werden, ist der Standardpfad eigentlich das Programmverzeichnis.
Nur mal so gefragt: Warum denkst Du, dass er eine vorhandene Datei anhängt?
Ich seh davon nichts in seinem Posting. Da steht CREATE DATABASE _und_ der
Hinweis "eine Datenbank auf dem SQL Server _anlegen_".
--
Tschau, 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
Peter Fleischer
2008-05-16 05:33:43 UTC
Permalink
Post by Stefan Falz [MVP]
Post by Peter Fleischer
bei Nutzung von AttachDbFilename ist der SQL Server Dienst erst einmal
uninteressant. Auf die Datei wird mit dem Nutzer zugegriffen, unter dem
das Programm läuft.
er verwendet aber CREATE DATABASE und das wiederum läuft mit den Rechten
des Diensts (IMHO). Es sei denn, die NTLM Authentifizierung wird über den
SQL Server ins OS durchgereicht. Kann ich mir aber hierbei nicht vorstellen.
Hi Stefan,
du hast Recht. Ich hatte das CREATE DATABASE übersehen, da ich so etwas nie
benutze. Welcher Anwender lässt das Anlegen von Datenbanken zu? Ich nutze
lieber gleich eine leere mdf, die im Projekt erstellt wurde.
--
Viele Gruesse

Peter
Werner Perplies
2008-05-16 05:59:09 UTC
Permalink
Peter,
Post by Peter Fleischer
Post by Stefan Falz [MVP]
Post by Peter Fleischer
bei Nutzung von AttachDbFilename ist der SQL Server Dienst erst einmal
uninteressant. Auf die Datei wird mit dem Nutzer zugegriffen, unter dem
das Programm läuft.
er verwendet aber CREATE DATABASE und das wiederum läuft mit den Rechten
des Diensts (IMHO). Es sei denn, die NTLM Authentifizierung wird über den
SQL Server ins OS durchgereicht. Kann ich mir aber hierbei nicht vorstellen.
Hi Stefan,
du hast Recht. Ich hatte das CREATE DATABASE übersehen, da ich so etwas nie
benutze. Welcher Anwender lässt das Anlegen von Datenbanken zu? Ich nutze
lieber gleich eine leere mdf, die im Projekt erstellt wurde.
Ich, beim Erstaufruf des Programmes. ;-)

Es gibt sicher viele Wege, die nach Rom führen, aber ich mache das so, doch
es wird sicherlicher viele "Fürs" und "Widers" geben.

Geht etwa so:
Nach Erstaufruf:

Erzeugt einen _ersten_ Connectionstring aus den Daten einer
unverschlüsselten Textdatei, die direkt danach vernichtet wird.

Holt sich den Datenpfad
Richtet die Datenbank ein,
Erzeugt die notwendigen Tabellen,
Richtet einen Standarduser ein für den Zugriff des Programmes auf Tabelle
"Log" und "User";
Speichert die Daten dieses Users verschlüsselt in einer Datei.
Fragt nach "Namen" und Passwort eines "SuperUsers" und richtet ihn mit den
notwendigen Rechten ein.

Danach kann dieser "SuperUser" weitere "SuperUser" und "StandardUser"
einrichten.

Alle User erhalten die vom Programm vorgesehenen Rechte.

Ziel war es, SuperUser und User nicht mit den Funktionen des SQL-Servers zu
belasten.


Werner
--
www.weepee.eu
Peter Haus
2008-05-16 06:19:15 UTC
Permalink
Hallo Peter
Post by Peter Fleischer
du hast Recht. Ich hatte das CREATE DATABASE übersehen, da ich so etwas nie
benutze. Welcher Anwender lässt das Anlegen von Datenbanken zu? Ich nutze
lieber gleich eine leere mdf, die im Projekt erstellt wurde.
Auf meine Frage "Setup mit SQL DB erstellen" vom 29.4.08 hattest Du mir
am 1.5.08 geantwortet.
"Ich persönlich bevorzuge die die Erzeugung der Datenbank per Code (CREATE
...). Meist sind neben dem Erzeugen der Datenbankstruktur auch noch Daten
für den Anfangsszustand einzufügen, die oft vom konkreten Einsatzfall
abhängen (z.B. konkrete Nutzerdaten, wie Adressen, Telefonnumern usw.). Das
muss man für jeden Anwender sowieso per Code machen. Eine spätere
Versionierungen der Datenbankstruktur ist meist auch nur per Code möglich,
um alte Datenbestände nicht zu verlieren. Damit reiht sich die Erzeugung der
Datenbank technologisch in alle anderen Schritte ein und muss nicht als
separate Technologie in doe Lösung implementiert werden."

Wie verstehe ich jetzt das Ganze?

Gruss Peter
Peter Haus
2008-05-16 06:55:36 UTC
Permalink
Hallo Peter

Das hatte ich wohl falsch verstanden.
Das "CREATE ..." meinte vor allem "CREATE TABLE und zur
Installation ein sp_attach aufzurufen.
Peter Haus
2008-05-15 19:23:46 UTC
Permalink
Hallo Stefan
Post by Stefan Falz [MVP]
Naja, steht doch da: Zugriff verweigert -> Berechtigungsproblem.
Ich geh mal davon aus, dass dem Account, der den Dienst ausführt,
die Rechte in deinem Anwendungsverzeichnis fehlen.
Ich blicke es noch nicht ganz mit dem Rechte vergeben, aber es sieht
sehr danach aus.
Post by Stefan Falz [MVP]
Ich persönlich
würde die Datenbank eh im Standardpfad des DBMS anlegen, nicht im
Anwendungsverzeichnis.
Kannst Du mir sagen wie ich den

Kannst Du mir sagen wie ich den Standardpfad des DBMS erhalten kann?

Gruss Peter
Uwe Ricken
2008-05-16 02:37:50 UTC
Permalink
Hallo Peter,

der Standardpfad für Datenbanken ist by default
C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\DATA

Du kannst ihn aber normaler Weise über die Eigenschaften des Server mit dem
SSMS neu definieren.

Ich vermute aber - wie Stefan - dass hier ein Problem mit den Berechtigungen
für den Serviceaccount vorliegt.
Gibst Du bei CREATE DATABASE die Option FILE explizit mit an?

CREATE DATABASE wird immer mit dem Serviceaccount des SQL-Servers ausgeführt
und nicht unter dem Account des angemeldeten Users. Stelle also erst mal
fest, mit welchem Account der SQL Server überhaupt ausgeführt wird.

Dann überprüfst Du die Berechtigungen für das Verzeichnis, in dem die
Datenbank angelegt werden soll. Dort muß der Service Account natürlich
Schreibrechte besitzen.

HTH ;-)
--
Gruß, Uwe Ricken
MCP for SQL Server 2000 Database Implementation

db-Berater GmbH - 64390 Erzhausen
http://www.db-berater.de
http://www.memberadmin.de
http://www.conferenceadmin.de
____________________________________________________
dbdev: http://www.dbdev.org
FAQ: http://www.donkarl.com/AccessFAQ.htm
Peter Haus
2008-05-16 05:03:15 UTC
Permalink
Hi Uwe

Danke für Deine Antwort.

Es ist so, der SQL-Server Dienst wird unter einem bestimmten
Account ausgeführt. Das ist das Problem.
Das hatte ich zuvor nicht erkannt.
Post by Uwe Ricken
der Standardpfad für Datenbanken ist by default
C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\DATA
Wenn ich eine sichere Methode hätte, den Standardpfad der
DBs zu ermitteln, würde ich das gerne so machen.
Nur wie ich den ermitteln kann, ist mir nicht klar.
Post by Uwe Ricken
Du kannst ihn aber normaler Weise über die Eigenschaften des Server mit dem
SSMS neu definieren.ad
Sorry. Was bedeutet SSMS. (Aber verbiegen möchte ich den Standardpfad
im Fall nicht.)

Gruss Peter
Werner Perplies
2008-05-16 05:31:42 UTC
Permalink
Hallo Peter,
Post by Peter Haus
Hi Uwe
Danke für Deine Antwort.
Es ist so, der SQL-Server Dienst wird unter einem bestimmten
Account ausgeführt. Das ist das Problem.
Das hatte ich zuvor nicht erkannt.
Post by Uwe Ricken
der Standardpfad für Datenbanken ist by default
C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\DATA
Wenn ich eine sichere Methode hätte, den Standardpfad der
DBs zu ermitteln, würde ich das gerne so machen.
Nur wie ich den ermitteln kann, ist mir nicht klar.
Als Anfänger habe ich villeicht noch nicht alle Konventionen eingehalten,
aber dies ist ein Teil meiner CreateDatabase-Klasse, vielleicht hilfts ja:

public DefaultDataFolder()
{
cFolder = "";
oConn = MyGlobals.Conn; // eingerichteter Connectionstring
string cCommand = "DECLARE @data_path nvarchar(256);" +
"SET @data_path = (SELECT SUBSTRING(physical_name, 1,
CHARINDEX(N'master.mdf', " +
"LOWER(physical_name)) - 1) FROM master.sys.master_files " +
"WHERE database_id = 1 AND file_id = 1);SELECT @data_path;";
if (MyGlobals.ConnOpen(oConn)) // prüft, ob Vernindung offen ist,
ggf. wird die VErbindung geöffnet.
{
try
{
SqlCommand oCmd = new SqlCommand(cCommand, oConn);
// oConn.Open();
cFolder = oCmd.ExecuteScalar().ToString();
oConn.Close();
}
catch (Exception ex)
{
new WordWrapString().WrappedText(ex.Message + "\n", 70);
string cTemp = "Fehler beim Bestimmen des
Datenbankverzeichnisses!";
MessageObject oMsg = MyGlobals.DoMessage(false, cTemp,
cCommand, ex, MessageType.ErrorBox);
}
finally
{
oConn.Close();
}
}
}

HTH

[...]

Werner
--
www.weepee.eu
Peter Haus
2008-05-16 05:45:30 UTC
Permalink
Hallo Werner

Danke. Ich hatte auch gerade heraus gefunden, dass in
der Tabelle master.sys.master_files das
Gewünschte zu sehen ist.
Ich benutze gerne Deine Code Sequenz.

Grüsse Peter
Uwe Ricken
2008-05-16 05:56:06 UTC
Permalink
Hallo Peter,

wenn Du so oder so den Standardpfad verwenden möchtest,
dann einfach nur ein

CREATE DATABASE dbName

Damit wird die DB automatisch im Standardverzeichnis angelegt ;-)

HTH ;-)
--
Gruß, Uwe Ricken
MCP for SQL Server 2000 Database Implementation

db-Berater GmbH - 64390 Erzhausen
http://www.db-berater.de
http://www.memberadmin.de
http://www.conferenceadmin.de
____________________________________________________
dbdev: http://www.dbdev.org
FAQ: http://www.donkarl.com/AccessFAQ.htm
Peter Haus
2008-05-16 06:28:39 UTC
Permalink
Hi Uwe
Post by Uwe Ricken
wenn Du so oder so den Standardpfad verwenden möchtest,
dann einfach nur ein
CREATE DATABASE dbName
Damit wird die DB automatisch im Standardverzeichnis angelegt ;-)
Wieso denn einfach, wenn's auch umständlich geht.
(Ich hätte mir einige Zeit erspart)


Gruss Peter
Werner Perplies
2008-05-16 06:36:43 UTC
Permalink
Peter,
Post by Peter Haus
Hi Uwe
Post by Uwe Ricken
wenn Du so oder so den Standardpfad verwenden möchtest,
dann einfach nur ein
CREATE DATABASE dbName
Damit wird die DB automatisch im Standardverzeichnis angelegt ;-)
Wieso denn einfach, wenn's auch umständlich geht.
(Ich hätte mir einige Zeit erspart)
_Ich_ habe bewusst den _umständlicheren_ Weg gewählt, denn mit explizieter
Pfadangabe habe ich einen nicht zu unterschätzenden Freiheitsgrad.

Ich etze den Standardpfad ein, wenn kein anderer, wo auch immer, definiert
wurde.
Post by Peter Haus
Gruss Peter
Werner
--
www.weepee.eu
Peter Haus
2008-05-16 07:01:00 UTC
Permalink
Post by Werner Perplies
_Ich_ habe bewusst den _umständlicheren_ Weg gewählt, denn mit explizieter
Pfadangabe habe ich einen nicht zu unterschätzenden Freiheitsgrad.
Ich etze den Standardpfad ein, wenn kein anderer, wo auch immer, definiert
wurde.
Ich werde es auch so versuchen.

- "Erzeugt die notwendigen Tabellen," bis hier bin ich jetzt

und da sieht es noch duster aus.
- Richtet einen Standarduser ein für den Zugriff des Programmes auf Tabelle
"Log" und "User";
Speichert die Daten dieses Users verschlüsselt in einer Datei.
Fragt nach "Namen" und Passwort eines "SuperUsers" und richtet ihn mit den
notwendigen Rechten ein.

Danke und Grüsse Peter
Werner Perplies
2008-05-16 07:16:22 UTC
Permalink
Peter,
Post by Peter Haus
Post by Werner Perplies
_Ich_ habe bewusst den _umständlicheren_ Weg gewählt, denn mit explizieter
Pfadangabe habe ich einen nicht zu unterschätzenden Freiheitsgrad.
Ich etze den Standardpfad ein, wenn kein anderer, wo auch immer, definiert
wurde.
Ich werde es auch so versuchen.
- "Erzeugt die notwendigen Tabellen," bis hier bin ich jetzt
und da sieht es noch duster aus.
- Richtet einen Standarduser ein für den Zugriff des Programmes auf Tabelle
"Log" und "User";
Speichert die Daten dieses Users verschlüsselt in einer Datei.
Fragt nach "Namen" und Passwort eines "SuperUsers" und richtet ihn mit den
notwendigen Rechten ein.
Danke und Grüsse Peter
Was möchtest Du denn genau wissen?

Als Anregung könnte ich Dir mal etwas schicken.
Schick mir mal eine Mail. ;-)

Als ich das realisierte, hatte ich massives "Henne<->Problem" ;-), die
einzelnen" Schritte waren nicht so kompliziert.

Werner
--
www.weepee.eu
Werner Perplies
2008-05-16 07:24:01 UTC
Permalink
Sorry,
Post by Werner Perplies
Als ich das realisierte, hatte ich massives "Henne<->Problem" ;-), die
einzelnen" Schritte waren nicht so kompliziert.
Kommt davon, wenn die Finger schneller als der Kopf sind:
soll heißen:
Henne<->Ei-Problem
Post by Werner Perplies
Werner
Werner
--
www.weepee.eu
Werner Perplies
2008-05-16 06:00:11 UTC
Permalink
Hallo Peter,
Post by Peter Haus
Hallo Werner
Danke.
Da nich für! ;-)
Post by Peter Haus
Ich hatte auch gerade heraus gefunden, dass in
der Tabelle master.sys.master_files das
Gewünschte zu sehen ist.
Ich benutze gerne Deine Code Sequenz.
Grüsse Peter
Werner
--
www.weepee.eu
Peter Spoenemann
2008-05-16 21:32:22 UTC
Permalink
Hallo Werner,

----- Original Message -----
From: "Werner Perplies" <***@weepee.de>
Newsgroups: microsoft.public.de.german.entwickler.dotnet.datenbank
Sent: Friday, May 16, 2008 7:31 AM
Subject: Re: CREATE DATABASE Zugriff verweigert
Post by Werner Perplies
Post by Peter Haus
Post by Uwe Ricken
der Standardpfad für Datenbanken ist by default
C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\DATA
Wenn ich eine sichere Methode hätte, den Standardpfad der
DBs zu ermitteln, würde ich das gerne so machen.
Nur wie ich den ermitteln kann, ist mir nicht klar.
Als Anfänger habe ich villeicht noch nicht alle Konventionen eingehalten,
CHARINDEX(N'master.mdf', " +
"LOWER(physical_name)) - 1) FROM master.sys.master_files " +
Genau genommen bekommst du hier nicht den Standardpfad für neue Datenbanken,
sondern den Pfad für die Master-Datenbank.
Und das ist oft nicht der Standardpfad für neue Datenbanken.

Der Standardpfad steht in der Registry und kann z.B. so gelesen werden :

declare @SmoDefaultFile nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData',
@SmoDefaultFile OUTPUT
declare @SmoDefaultLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', @SmoDefaultLog
OUTPUT

select @SmoDefaultFile, @SmoDefaultLog



Schönes Wochenende
Peter
Werner Perplies
2008-05-17 04:03:25 UTC
Permalink
Hallo Peter,
Post by Peter Spoenemann
Hallo Werner,
----- Original Message -----
Newsgroups: microsoft.public.de.german.entwickler.dotnet.datenbank
Sent: Friday, May 16, 2008 7:31 AM
Subject: Re: CREATE DATABASE Zugriff verweigert
Post by Werner Perplies
Post by Peter Haus
Post by Uwe Ricken
der Standardpfad für Datenbanken ist by default
C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\DATA
Wenn ich eine sichere Methode hätte, den Standardpfad der
DBs zu ermitteln, würde ich das gerne so machen.
Nur wie ich den ermitteln kann, ist mir nicht klar.
Als Anfänger habe ich villeicht noch nicht alle Konventionen eingehalten,
CHARINDEX(N'master.mdf', " +
"LOWER(physical_name)) - 1) FROM master.sys.master_files " +
Genau genommen bekommst du hier nicht den Standardpfad für neue Datenbanken,
sondern den Pfad für die Master-Datenbank.
Und das ist oft nicht der Standardpfad für neue Datenbanken.
Danke für die Aufklärung, da war ich sicherlich nicht korrekt mit meiner
Aussage, mir persönlich war das schon bewusst, ich persönlich wollte genau
das haben.

Und oft ist es ja auch das Gleiche. Bei mir allerdings eher selten, da ich
dazu neige, möglichst viel konfigurierbar zu haben.
Post by Peter Spoenemann
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData',
@SmoDefaultFile OUTPUT
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
OUTPUT
Ich werde das auf jeden Fall mal in der Rubrik "Gut zu wissen!",
abspeichern.
Post by Peter Spoenemann
Schönes Wochenende
Peter
Danke, gleichfalls

Gruß
Werner
--
www.weepee.eu
Peter Haus
2008-05-17 15:38:08 UTC
Permalink
Hallo Peter

Ich habe versucht mit Deinem Vorschlag, das Default Verzeichnis des
SQL-Servers zu lesen, jedoch ohne Erfolg.
Mein Code sieht wie unten aus. Es wird zwar eine Row mit zwei Feldern
in DataReader zurückgegeben, jedoch ohne Inhalt.
Zudem habe ich in der Registry, keinen entsprechenden Eintrag gefunden.
Hast Du noch zusätzliche Info?


Mein Code:
'Der SQL-Server Standardpfad steht in der Registry und kann z.B. so gelesen
werden :
Public Function DefaultDataFolder2() As String

Dim sFolder As String = ""

Dim cCommand As String = "declare @SmoDefaultFile nvarchar(512) " &
_
"exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', " & _
"N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', " &
_
"@SmoDefaultFile OUTPUT " & _
"declare @SmoDefaultLog nvarchar(512) " & _
"exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', " & _
"N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog',
@SmoDefaultLog " & _
"OUTPUT " & _
"select @SmoDefaultFile, @SmoDefaultLog"

If IsOpen(mCnn) Then
Try
Dim oCmd As SqlCommand = New SqlCommand(cCommand, mCnn)
Dim reader As SqlDataReader

reader = oCmd.ExecuteReader
While reader.Read
sFolder = reader.Item(0) & ", " & reader.Item(1)
End While

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
'mCnn.Close()
End Try
End If

Return sFolder
End Function

Gruss Peter
Werner Perplies
2008-05-17 16:24:43 UTC
Permalink
Peter,

Am Sat, 17 May 2008 17:38:08 +0200 schrieb Peter Haus:

Was ist, wenn der Anwender (bei der Installation) entscheidet, das Daten
standardmäßig in ein anderes Verzeichnis sollen?

Da nützt Dir der Registryeintrag vermutlich wenig.

Werner
--
www.weepee.eu
Peter Haus
2008-05-17 18:54:27 UTC
Permalink
Hi Werner

Ich wollte den Code von Peter einfach mal testen.
Jedoch funktioniert es bei mir nicht. Auch wundere ich
mich darüber, dass in der Registry, der Pfad (SQL 2005)
nicht zu finden ist.
Der Hinweis das der Standardpfad für neue Datenbanken, nicht
der Pfad für die Master-Datenbank sein muss, ist ja da.
Und das man auch noch die Registry abfragen kann, ist für mich
auch neu.


Gruss. Machs Guet.
Peter
Werner Perplies
2008-05-18 05:00:36 UTC
Permalink
Peter,
Post by Peter Haus
Hi Werner
Ich wollte den Code von Peter einfach mal testen.
Jedoch funktioniert es bei mir nicht. Auch wundere ich
mich darüber, dass in der Registry, der Pfad (SQL 2005)
nicht zu finden ist.
Der Hinweis das der Standardpfad für neue Datenbanken, nicht
der Pfad für die Master-Datenbank sein muss, ist ja da.
Und das man auch noch die Registry abfragen kann, ist für mich
auch neu.
Gruss. Machs Guet.
Peter
Ok,

Ich mag das mit der Registry jetzt nicht ausprobieren, ich habe da
vielleicht etwas übersehen, kann aber irgendwie keinen Sinn im Kennen des
Registryeintrags sehen.

Interessanter sind da schon die weiteren Informationen der
Master-Datenbank, denn da finde ich zum Beispiel die kompletten Dateinamen
aller verwendeten Datenbanken.

Bist Du denn mit dem weiter gekommen, was ich Dir geschickt habe?

Im Zweifelsfalle einfach fragen.

Weiterhin viel Erfolg.

Gruß
Werner
--
www.weepee.eu
Peter Haus
2008-05-18 18:01:00 UTC
Permalink
Hallo Werner
Post by Werner Perplies
Ich mag das mit der Registry jetzt nicht ausprobieren, ich habe da
vielleicht etwas übersehen, kann aber irgendwie keinen Sinn im Kennen des
Registryeintrags sehen.
Falls Du es testen möchtest, die Info.
Der Registry Eintrag ist nur vorhanden, wenn Du auch den Standard-Pfad für
die Datenbanken änderst, ansonsten nicht.
Post by Werner Perplies
Interessanter sind da schon die weiteren Informationen der
Master-Datenbank, denn da finde ich zum Beispiel die kompletten Dateinamen
aller verwendeten Datenbanken.
Da schau ich auch nach, ob die DB evtl. schon auf eine andere Art
installiert wurde.
Post by Werner Perplies
Bist Du denn mit dem weiter gekommen, was ich Dir geschickt habe?
Mit deinem Stück Code, (bezügl. User Accounts) brauche ich noch Zeit
um mich damit zu befassen. Ich bin auf jedenfall froh darüber, dass ich
etwas zum spicken habe, wenn ich es brauche.
Post by Werner Perplies
Im Zweifelsfalle einfach fragen.
Gerne.
Post by Werner Perplies
Weiterhin viel Erfolg.
Frohes werken und gute Einfälle.

Grüsse Peter
Elmar Boye
2008-05-18 18:53:01 UTC
Permalink
Hallo Peter,
Post by Peter Haus
Ich wollte den Code von Peter einfach mal testen.
Jedoch funktioniert es bei mir nicht. Auch wundere ich
mich darüber, dass in der Registry, der Pfad (SQL 2005)
nicht zu finden ist.
Die Angabe von Peter bezieht sich auf die Standard-Instanz
eines SQL Servers, dort wird traditionell ein anderer
Registry-Zweig verwendet. Für benannte Intanzen wird verwendet:

HKLM\Software\Microsoft\Microsoft SQL Server\<Name der Instanz>\MSSQLServer

d.h. der Name der Instanz muß zunächst ermittelt werden.

Siehe auch einen älteren Beitrag von mir:
<URL:http://groups.google.de/group/microsoft.public.de.sqlserver/msg/86e7ea34f11632fc>
Post by Peter Haus
Der Hinweis das der Standardpfad für neue Datenbanken, nicht
der Pfad für die Master-Datenbank sein muss, ist ja da.
Die Datenpfad kann bei der Installation angeben werden und
ist später auch im SSMS änderbar (dort auch Protokoll-und Backup).

Grundsätzlich ist für alle Datenbank-Verzeichnisse zu beachten:
<URL:http://msdn.microsoft.com/de-de/library/ms189128.aspx>
"Sichern von Daten- und Protokolldateien"

weswegen Dein usprüngliches Verzeicnis verweigert wurde.

Gruß Elmar
Peter Haus
2008-05-19 04:36:24 UTC
Permalink
Hallo Elmar

Vielen Dank für Deinen Beitrag.
Da kommen doch noch ein paar Details zu Tage.

Grüsse Peter

Loading...