PDA

View Full Version : سوال: خطا در Detach نمودن دیتابیس در SQLServer enterprise 2008 R2



rezankh
پنج شنبه 27 شهریور 1393, 21:57 عصر
با سلام
من با کد زیر یک فایل mdf رو اتچ نمودم.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Configuration;
using System.Globalization;
using System.IO;

namespace MDFConnectionSample
{
public partial class Form1 : Form
{
SqlConnection my_cn = new SqlConnection("Data Source=.\\MSSQLSERVER2008;AttachDbFilename=|DataDi rectory|HarmDatabase.mdf;Integrated Security=True;");

SqlConnection my_cn2 = new SqlConnection("server = .\\MSSQLSERVER2008;database=" + Path.GetDirectoryName(Application.ExecutablePath) + "\\" + "HarmDatabase.mdf;Integrated Security=True;");


public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
my_cn.Open();
my_cn2.Open();
}

private void button1_Click(object sender, EventArgs e)
{
my_cn2.Close();
my_cn2.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from Reception_tb", my_cn2);
DataTable dt = new DataTable();
dt.Clear();
da.Fill(dt);
dataGridView1.DataSource = dt;
}

private void button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=.\\MSSQLSERVER2008;database=Master;Integrat ed Security=True;");
SqlCommand cmd = new SqlCommand("", conn);
cmd.CommandText = "sys.sp_detach_db " + Path.GetDirectoryName(Application.ExecutablePath) + "\\" + "HarmDatabase.mdf";
conn.Open();
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Dispose();
}
}
}



حال یک دیتابیس با نامی حاوی "D:\MDF CONNECTION SAMPLE\BIN\DEBUG\HARMDATABASE.MDF" در سرور ایجاد میشه که در ادامه براحتی وصل میشه به دیتاگرید ویو . ولی زمانی که میخوام Detach کنمش خطای

Incorrect syntax near '\'.

رو میده البته زمانی که بجای این نام دیتابیس از نام دیتابیس دیگه ای که \ نداره استفاده میکنم دستور دیتچ براحتی انجام میشه.
نمیدونم با این \ چیکار کنم؟

123646
123647

امیر مهرشاد
جمعه 28 شهریور 1393, 10:48 صبح
دسترسی تیم داشتم درست میکردم - اول بجای \\ یدونه @ اول رشتت بزار تست کنید بعد در داخل منیجمنتت اسم دیتابیس رو یبار عوض کنید (البته توی برنامتم که میدونید تغیرات یادتون نره) لطفا نتیجه رو اعلام کنید:متفکر:

امیر مهرشاد
جمعه 28 شهریور 1393, 10:49 صبح
SqlConnection my_cn = newSqlConnection(@"Data Source=.\MSSQLSERVER2008;AttachDbFilename=|DataDi rectory|HarmDatabase.mdf;Integrated Security=True;");

rezankh
جمعه 28 شهریور 1393, 12:48 عصر
سلام
با @ هم اینطوری :

SqlConnection my_cn2 = new SqlConnection("server = .\\MSSQLSERVER2008;database=" + Path.GetDirectoryName(Application.ExecutablePath) + @"\" + "HarmDatabase.mdf;Integrated Security=True;");

امتحان کردم باز هم همون خطا رو میده.
نام دیتابیس رو هم که تغییر میدم بعدش دو باره نمیتونم اتچ بشم و خطای وجود داشتن دیتابیس رو میده در حالیکه بدون تغییر نام امکام اتچ مجدد هست.:متفکر:

rezankh
یک شنبه 30 شهریور 1393, 10:12 صبح
سلام
بالاخره درستش کردم کد دیتچ کردن رو میذارم.

SqlConnection conn = new SqlConnection("Data Source=.\\MSSQLSERVER2008;database=Master;Integrat ed Security=True;");

conn.Open();
string Alter1 = @"ALTER DATABASE [" + Path.GetDirectoryName(Application.ExecutablePath) + @"\" + "HarmDatabase.mdf" + "] SET Single_User WITH Rollback Immediate";
SqlCommand Alter1Cmd = new SqlCommand(Alter1, conn);
Alter1Cmd.ExecuteNonQuery();

SqlCommand cmd = new SqlCommand("", conn);
cmd.CommandText = @"sys.sp_detach_db '" + Path.GetDirectoryName(Application.ExecutablePath) + @"\" + "HarmDatabase.mdf" + "'";
//cmd.CommandText = @"sys.sp_renamedb '" + Path.GetDirectoryName(Application.ExecutablePath) + @"\" + "HarmDatabase.mdf','Harmdb'";
conn.Close();
conn.Open();
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Dispose();