Я пытаюсь перенести базу данных с локальной машины на удаленную.
Из локального SQL Server
я создаю backup и сохраняю его в расшаренную папку на удаленном компьютере(\\SERVER228\SharedFolder\
).
На удаленном компьютере также имеется SQL Server
, и я собираюсь сделать RESTORE DATABASE
из этого backup
файла, имея ConnectionString
к удаленному SQL Server
'у.
Команда RESTORE DATABASE
требует параметр FROM DISK
, в котором указывается имя backup
файла ('D:\Shared\RetardsDB.bak'
).
Могу ли я узнать по сетевому имени папки её физический адрес для того, чтобы запустить RESTORE DATABASE
команду напрямую?
И если да, то как я могу это сделать?
Пишу на C#.
Через WMI:
Вот пример получения полной информации:
private DataTable GetSharedFolderAccessRule()
{
DataTable DT = new DataTable();
try
{
DT.Columns.Add("ShareName");
DT.Columns.Add("Caption");
DT.Columns.Add("Path");
DT.Columns.Add("Domain");
DT.Columns.Add("User");
DT.Columns.Add("AccessMask");
DT.Columns.Add("AceType");
ManagementScope Scope = new ManagementScope(@"\\.\root\cimv2");
Scope.Connect();
ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_LogicalShareSecuritySetting");
ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query);
ManagementObjectCollection QueryCollection = Searcher.Get();
foreach (ManagementObject SharedFolder in QueryCollection)
{
{
String ShareName = (String) SharedFolder["Name"];
String Caption = (String)SharedFolder["Caption"];
String LocalPath = String.Empty;
ManagementObjectSearcher Win32Share = new ManagementObjectSearcher("SELECT Path FROM Win32_share WHERE Name = '" + ShareName + "'");
foreach (ManagementObject ShareData in Win32Share.Get())
{
LocalPath = (String) ShareData["Path"];
}
ManagementBaseObject Method = SharedFolder.InvokeMethod("GetSecurityDescriptor", null, new InvokeMethodOptions());
ManagementBaseObject Descriptor = (ManagementBaseObject)Method["Descriptor"];
ManagementBaseObject[] DACL = (ManagementBaseObject[])Descriptor["DACL"];
foreach (ManagementBaseObject ACE in DACL)
{
ManagementBaseObject Trustee = (ManagementBaseObject)ACE["Trustee"];
// Full Access = 2032127, Modify = 1245631, Read Write = 118009, Read Only = 1179817
DataRow Row = DT.NewRow();
Row["ShareName"] = ShareName;
Row["Caption"] = Caption;
Row["Path"] = LocalPath;
Row["Domain"] = (String) Trustee["Domain"];
Row["User"] = (String) Trustee["Name"];
Row["AccessMask"] = (UInt32) ACE["AccessMask"];
Row["AceType"] = (UInt32) ACE["AceType"];
DT.Rows.Add(Row);
DT.AcceptChanges();
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace, ex.Message);
}
return DT;
}
https://stackoverflow.com/questions/3567063/get-a-list-of-all-unc-shared-folders-on-a-local-network-server
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Я только осваиваю разработку в облакеМне нужно иметь доступ к коду с разных компов под одной учётной записью
Есть простой код: http://jsbincom/yulaturibe/edit?html,js,console,output
Как преобразовать номер телефона к виду 8999999999, сейчас вид такой +7(344) 444-44-44Сделала из него такой +73444444444 следующим образом: