Adatbázis fájl elérési útvonala programból

Adatbázis fájl elérési útvonala programból
2010-09-15T09:35:34+02:00
2010-10-06T20:22:32+02:00
2022-11-19T10:25:40+01:00
mezofi
Sziasztok!
Hogyan tudom kiolvasni, az Sql szerverben lévé DATA könyvtár elérési útvonalát?

Lenne egy CREATE adatbázis, és ehhez meg kell adni az elérési útvonalat ha minden igaz.
Ezt találtam a neten:
str = "CREATE DATABASE MyDatabase ON PRIMARY " + "(NAME = MyDatabase_Data, " + "FILENAME = 'C:\\MyDatabaseData.mdf', " + "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " + "LOG ON (NAME = MyDatabase_Log, " + "FILENAME = 'C:\\MyDatabaseLog.ldf', " + "SIZE = 1MB, " + "MAXSIZE = 5MB, " + "FILEGROWTH = 10%)";

Ehhez a részéhez biztosan kelle:

"FILENAME = 'C:\\MyDatabaseData.mdf', " +

Nálam most ez lenne:

FILENAME = 'C:\\Program Files\\Microsoft SQL Server\\MSSQL10_50.SQLEXPRESS\\MSSQL\\DATA\\cel.mdf ';
De ahány telepítés annyiféle directory elérés.

Köszi
Mutasd a teljes hozzászólást!
Bocsi, de nem okvetlenül szükséges.
CREATE DATABASE (Transact-SQL)

Próbáld ki, ha van rá időd:
USE master; GO CREATE DATABASE mytest; GO -- Verify the database files and sizes SELECT name, size, size*1.0/128 AS [Size in MBs] FROM sys.master_files WHERE name = N'mytest'; GO

Elérési utat csak akkor kell megadni, ha a telepítéskor létrehozott ...\MSSQL\DATA könyvtártól eltérő helyen kívánod létrehozni az adatbázisod.
Mutasd a teljes hozzászólást!

  • Pontosabban csak akkor, ha nem a servernek megadott default könyvtárba akarod létrehozni.

    De rakd az exe-t mellé, annak gondolom tudod az elérési utját, hiszen te telepited. és akkor oda teszed az mdf és ldf file-okat is.
    Mutasd a teljes hozzászólást!
  • Bocsi, de egy default telepítésnél természetesen a könyvtár helye is default..
    Ha nem ad meg elérési útvonalat, akkor szvsz a server által kezelt DATA könyvtárba kerül az adatbázis.
    Próbáld ki..
    Mutasd a teljes hozzászólást!
  • Hali!

    Ahogy előttem is mondták már, nem kötelező megadnod az mdf és ldf fájlok elérési útját, ha az alapértelmezett könyvtárban akarod létrehozni.

    Magát a könyvtárat pedig vagy registryből tudod lekérdezni
    vagy add hozzá a Microsoft.SQLServer.Smo referenciát a projektedhez, és a következő kóddal eléred

    Microsoft.SqlServer.Management.Smo.Server(ServerName).Information.RootDirectory + "\\DATA\\"
    Mutasd a teljes hozzászólást!
  • Jó, berakta a DATA könyvtárba.
    Köszi.
    Mutasd a teljes hozzászólást!
  • Na, ezzel kísérleteztem eddig.
    Microsoft.SqlServer.Management.Smo.Server("MEZOFI\\SQLEXPRESS").Information.RootDirectory + "\\DATA\\";

    Többek közt ezek a névterek vannak:
    using System.Data.SqlClient; // Adatbázis kapcsolathoz kell
    using System.Configuration;
    using System.IO;
    using Microsoft.SqlServer.Management.Common;
    using Microsoft.SqlServer.Management.Smo;
    using System.Security.Principal;


    Amíg ezt írom nincs semmi gond:
    Microsoft.SqlServer.Management.Smo.Server

    Amint kirakom a (-jelet, egyből aláhúzza, hogy a Microsoft.SqlServer.Management.Smo object represents an instance of SQL server.
    Mutasd a teljes hozzászólást!
  • Amint kirakom a (-jelet, egyből aláhúzza, hogy a Microsoft.SqlServer.Management.Smo object represents an instance of SQL server.

    Nem kell a using, csupán a referenciák közé kell felvenni.

    Találtam egy forrást a témában (SqlServerDetective), de még nem tudtam kipróbálni:

    http://google.com/codesearch/p?hl=en#MC_dYRuAlmw/trunk/src/SharpenUp.Tests/Helpers/Database/SqlServerDetective.cs&q=sqlServerKey%20OpenSubKey&sa=N&cd=2&ct=rc
    Link-ként nem tudom betenni mert túl bonyi a prog.hu-nak..
    Mutasd a teljes hozzászólást!
  • Amint kiveszem a using-ból.
    Egyből hiba lesz a forrásban ennél a részben:

    Server server = new Server(new ServerConnection(conn));
    Mutasd a teljes hozzászólást!
  • Nézd meg e kódot:

    using System; using Microsoft.Win32; namespace SharpenUp.Tests.Helpers.Database { internal static class SqlServerDetective { public static string DetectLocalInstalledDataSource() { string firstInstalledInstance = GetFirstInstalledInstance(); switch (firstInstalledInstance) { case "MSSQLSERVER": return "."; case "SQLEXPRESS": return @".\SQLEXPRESS"; default: throw new InvalidOperationException("GetFirstInstalledInstance returned unknown value " + firstInstalledInstance); } } private static string GetFirstInstalledInstance() { string[] value = InstalledInstances(); if (value.Length == 0) throw new InvalidOperationException("No installed instances of sql server found."); return value[0]; } private static string[] InstalledInstances() { string[] value; using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Microsoft Sql Server")) { if (sqlserverKey == null) throw new InvalidOperationException("No sql server installed on this machine"); value = (string[])sqlserverKey.GetValue("InstalledInstances"); if (value == null) throw new InvalidOperationException("Sql server key found, but no value InstalledInstances found"); } return value; } public static int GetFirstInstalledVersion() { string firstInstalledVersion = GetFirstInstalledInstance(); string keyName; using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Microsoft Sql Server\Instance Names\SQL")) { if (sqlserverKey == null) throw new InvalidOperationException("SQL key not found to detect installed version."); keyName = (string) sqlserverKey.GetValue(firstInstalledVersion); } using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(string.Format(@"Software\Microsoft\Microsoft Sql Server\{0}\MSSQLServer\CurrentVersion", keyName))) { string version = (string) sqlserverKey.GetValue("CurrentVersion"); if (version.StartsWith("9.")) return 2005; if (version.StartsWith("10.")) return 2008; throw new NotImplementedException("Could not translate version " + version + " into logical version."); } } public static string DetectVersionInstalledDataSource() { using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Microsoft Sql Server")) { if (sqlserverKey == null) throw new InvalidOperationException("No sql server installed on this machine"); string[] value = (string[])sqlserverKey.GetValue("InstalledInstances"); if (value == null) throw new InvalidOperationException("Sql server key found, but no value InstalledInstances found"); switch (value[0]) { case "MSSQLSERVER": return "."; case "SQLEXPRESS": return @".\SQLEXPRESS"; default: throw new InvalidOperationException("InstalledInstances returned unknown value " + value); } } } } }
    Mutasd a teljes hozzászólást!
  • Megnéztem.
    A DetectVersionInstalledDataSource()-ra azt adja ki, hogy ./SQLEXPRESS

    Ez elárulja nekem az útvonalat?
    Ami nálam igazából ez:
    C:\\Program Files\\Microsoft SQL Server\\MSSQL10_50.SQLEXPRESS\\MSSQL\\DATA\\cel.mdf


    A többi függvény azt mondja:
    - SQLEXPRESS
    - 2008
    Mutasd a teljes hozzászólást!
  • Ok, nézd meg a teljes csomagot, tán többet is kaphatsz..
    Mutasd a teljes hozzászólást!
  • Hello.

    Bocsi, utánanéztem kicsit a dolognak, és a következő kóddal nekem működik:

    string dirName = new Microsoft.SqlServer.Management.Smo.Server(@"MEZOFI\SQLEXPRESS").Information.RootDirectory + "\\DATA\\";


    Referenciaként pedig a következőket kell hozzáadni a projekthez:
    Microsoft.SqlServer.ConnectionInfo
    Microsoft.SqlServer.Management.Sdk.Sfc
    Microsoft.SqlServer.Smo
    Mutasd a teljes hozzászólást!

  • Szuper.
    Köszi,
    Akkor a new rész kimaradt. Sajnos nagyon amatőr szinten nyomulok.
    Mutasd a teljes hozzászólást!
  • Hali,
    örülök, hogy segíthettem és ne csüggedj elég egyszerű a C# szintaxisa hamar belejössz :)
    Mutasd a teljes hozzászólást!
  • Összekalapáltam valamit (a SqlServerDetective alapján), adott egy form rajta három textbox és egy button. A többi a kódban (a hibakezelés nem 100%-os).
    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.Win32; using System.IO; namespace ReadRegistryCs { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //1. van server? (InstalledInstances) //2. melyik verzió? (Instance Names\SQL -> pl. MSSQL.1 ->MSSQLServer\CurrentVersion) -> pl. 9.... == 2005 //3. hol a DataRoot? (Instance Names\SQL -> pl. MSSQL.1 ->Setup) -> pl. C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL string wserver = DetectVersionInstalledDataSource(); string wservertip = System.Convert.ToString(GetFirstInstalledVersion()); string wdataroot = GetFirstInstalledVersionData(); if (wserver == "") { wserver = "nincs SQL Server telepítve"; } textBox1.Text = wserver; if (wservertip != "") { textBox2.Text = wservertip; } if (wdataroot != "") { textBox3.Text = wdataroot; } } public static string DetectVersionInstalledDataSource() { using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Microsoft Sql Server")) { if (sqlserverKey == null) throw new InvalidOperationException("No sql server installed on this machine"); string[] value = (string[])sqlserverKey.GetValue("InstalledInstances"); if (value == null) throw new InvalidOperationException("Sql server key found, but no value InstalledInstances found"); return value[0]; } } public static int GetFirstInstalledVersion() { string firstInstalledVersion = GetFirstInstalledInstance(); string keyName; using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Microsoft Sql Server\Instance Names\SQL")) { if (sqlserverKey == null) throw new InvalidOperationException("SQL key not found to detect installed version."); keyName = (string)sqlserverKey.GetValue(firstInstalledVersion); } using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(string.Format(@"Software\Microsoft\Microsoft Sql Server\{0}\MSSQLServer\CurrentVersion", keyName))) { string version = (string)sqlserverKey.GetValue("CurrentVersion"); if (version.StartsWith("9.")) return 2005; if (version.StartsWith("10.")) return 2008; throw new NotImplementedException("Could not translate version " + version + " into logical version."); } } private static string GetFirstInstalledInstance() { string[] value = InstalledInstances(); if (value.Length == 0) throw new InvalidOperationException("No installed instances of sql server found."); return value[0]; } private static string[] InstalledInstances() { string[] value; using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Microsoft Sql Server")) { if (sqlserverKey == null) throw new InvalidOperationException("No sql server installed on this machine"); value = (string[])sqlserverKey.GetValue("InstalledInstances"); if (value == null) throw new InvalidOperationException("Sql server key found, but no value InstalledInstances found"); } return value; } public static string GetFirstInstalledVersionData() { string firstInstalledVersion = GetFirstInstalledInstance(); string keyName; using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Microsoft Sql Server\Instance Names\SQL")) { if (sqlserverKey == null) throw new InvalidOperationException("SQL key not found to detect installed version."); keyName = (string)sqlserverKey.GetValue(firstInstalledVersion); } using (RegistryKey sqlserverKey = Registry.LocalMachine.OpenSubKey(string.Format(@"Software\Microsoft\Microsoft Sql Server\{0}\Setup", keyName))) { string dataroot = (string)sqlserverKey.GetValue("SqlDataRoot"); if (dataroot!= null) return dataroot; throw new NotImplementedException("Could not find data into SqlDataRoot."); } } } }
    Mutasd a teljes hozzászólást!
  • Ok, köszi, megnézem.
    Mutasd a teljes hozzászólást!
  • Igen, jól müxik. Köszi.
    Szépen kiírja az elérési útvonalat, a verzió számot, és a típust.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd