Я разрабатываю проект на C#. Я хочу отсоединить, а затем добавить базу данных SQL Server из кода C# с помощью SMO. Я могу снять базу данных, но когда я хочу, чтобы прикрепить ее, возникает ошибка:Прикрепить базу данных SQL Server в C#
Невозможно открыть физический файл «C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ DATA \ ghale. мдф». Ошибка операционной системы 5: «5 (Доступ запрещен.)».
Код:
OpenFileDialog f = new OpenFileDialog();
f.Title = "sqlbakcup";
f.FileName = "";
f.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files(*.*) |*.*";
if (f.ShowDialog() == DialogResult.OK)
{
SqlConnection sqlconn = new SqlConnection(@"Data Source=.;Initial Catalog=master;Integrated Security=True");
ServerConnection serverconn = new ServerConnection(sqlconn);
Server s = new Server(serverconn);
s.DetachDatabase("ghale", false);
//MessageBox.Show("ok");
SqlConnection sqlconn1 = new SqlConnection(@"Data Source=.;Initial Catalog=mydb2;Integrated Security=True");
SqlCommand sqlcmd = new SqlCommand("ALTER DATABASE mydb2 SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + "RESTORE DATABASE [mydb2] FROM DISK = @n WITH REPLACE ", sqlconn1);
sqlcmd.Parameters.AddWithValue("@n", f.FileName);
sqlconn1.Open();
sqlcmd.ExecuteNonQuery();
sqlconn1.Close();
SqlConnection sqlconn2 = new SqlConnection(@"Data Source=.;Initial Catalog=master;Integrated Security=True");
ServerConnection serverconn2 = new ServerConnection(sqlconn2);
Server s1 = new Server(serverconn2);
s1.AttachDatabase("ghale", new StringCollection {
@"C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ghale.mdf",
@"C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ghale_log.ldf" }, AttachOptions.None);
//MessageBox.Show("ok");
MessageBox.Show("OK");
}
Что такое smo в вашем посте? – RBT
@ RBT: общие объекты управления SQL Server - библиотека для управления сервером и его объектами базы данных –
SMO означает объекты управления SQL Server – atefeh