سلام تمام مطالب مربوط را خواندم ولی با این پیغام خطا نمی دانم چه کنم. لطفا راهنمایی کنیید.
سلام تمام مطالب مربوط را خواندم ولی با این پیغام خطا نمی دانم چه کنم. لطفا راهنمایی کنیید.
این خطا:
RESTORE cannot process database 'H:\SOURCE\APPLICATION\WORDS_APPLICATION\BIN\DEBUG \DB_WORDS.MDF' because it is in use by this session. It is recommended that the master database be used when performing this operation.
RESTORE DATABASE is terminating abnormally.
با سلام
منم دقیقا مشکل همین دوست رو دارم
این خطا برای چیست؟
البته وقتی کد رو در یک فرم خالی استفاده میکنم بدون مشکل کار میکنه ولی وقتی تو برنامه خودم که یک ترد هم هست که هر دقیقه دیتا بیس رو چک میکنه استفاده میکنم این خطا رو میده
من در مورد kill روش kill کردن رو بلد نیستم.
لطفا کمک کنید.
آخرین ویرایش به وسیله zahra_no : دوشنبه 24 مرداد 1390 در 16:53 عصر دلیل: کامل کردن مطلب
خب طبیعیه برنامه خودتون بهش کانکشن باز داره
احیانا تو کانکشن استرینگ مربوط به دستورات ریستور نام دیتابیس رو به همین دیتابیس جاری اشاره نکردید؟
موقع بازیابی دیتابیس جاری باید master باشه
من در مورد kill روش kill کردن رو بلد نیستم.
این کد :
private void KillConnectionWithTSQL(string ServerConnectionString, string DataBaseName)
{
try
{
using (SqlConnection con = new SqlConnection(ServerConnectionString))
{
string query = @"SELECT DISTINCT request_session_id FROM master.sys.dm_tran_locks
WHERE resource_type = 'DATABASE'
AND resource_database_id = db_id(N'" + DataBaseName + "')";
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = query;
SqlDataReader reader = cmd.ExecuteReader();
List<object> pids = new List<object>();
while (reader.Read())
{
pids.Add(reader[0]);
}
reader.Close();
foreach (object Pid in pids)
{
if (Pid != null)
{
query = "KILL " + Pid;
cmd.CommandText = query;
cmd.ExecuteNonQuery();
}
}
if (con.State == ConnectionState.Open)
con.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
موفق باشید.
من با این دستور kill رو انجام میدم ولی باز همان خطا رو میدهtry
{
using (SqlConnection con = new SqlConnection(ServerConStr))
{
string query = @"SELECT DISTINCT request_session_id FROM master.sys.dm_tran_locks
WHERE resource_type = 'DATABASE'
AND resource_database_id = db_id(N'" + dbName + "')";
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = query;
SqlDataReader reader = cmd.ExecuteReader();
List<object> pids = new List<object>();
while (reader.Read())
{
pids.Add(reader[0]);
}
reader.Close();
foreach (object Pid in pids)
{
if (Pid != null)
{
query = "KILL " + Pid;
cmd.CommandText = query;
cmd.ExecuteNonQuery();
}
}
if (con.State == ConnectionState.Open)
con.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
دوستان کمک کنید. من به کمک فوری احتیاج دارم
برای بازیابی از این کد استفاده میکنم
master بودن رو کجا باید بزارم؟
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.CheckFileExists = false;
openFileDialog.CheckPathExists = true;
openFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
openFileDialog.DefaultExt = "Bak";
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
this.server = new SQLServer2Class();
this.Restor = new Restore2Class();
this.server.LoginSecure = true;
this.server.Connect(@"ZAHRA-PC\SQLEXPRESS", Missing.Value, Missing.Value);
database = (Database2)server.Databases.Item("PIM", Missing.Value);
Restor.Database = database.Name;
Restor.Files = openFileDialog.FileName;
Restor.SQLRestore(server);
server.DisConnect();
Restor = null;
server = null;
MessageBox.Show("jjgiuggvhh");
}
شرمنده میدونم بگردم پیدا میکنم
ولی واقعا وقت ندارم
بازم شرمنده دوست عزیز
SMO or DMO?
http://www.mssqltips.com/tip.asp?tip=1849
دوست عزیز بنده این کار رو قبلا با DMO انجام دادم ولی واقعیتش ماله چند سال پیشه
کدش یادم نمونده
فعلا این لینکها رو بررسی کنید
اگه مورد حل نشد PM بدید از آرشیوم پیدا میکنم براتون سند میکنم
http://www.dotnetspider.com/resource...ng-SQLDMO.aspx
http://social.msdn.microsoft.com/For...-b80891f832eb/
موفق باشید.
قبل از restore کوئری زیر رو اجرا کنید
1
ALTER DATABASE DatabaseName SET SINGLE_USER with ROLLBACK IMMEDIATE
بعد restore رو انجام بدید مثل کوئری زیر
1
RESTORE DATABASE DatabaseName FROM DISK= 'Path' WITH FILE = 1,NOUNLOAD,REPLACE,STATS = 10
بعد کوئری زیر رو در نهایت اجرا کنید
1
ALTER DATABASE DatabaseName SET MULTI_USER
به جای DatabaseName اسم دیتابیستونو بذارید , path هم مسیر بک آپ هست
اینو دوست عزیزمون زحمت کشیدن دستش درد نکنه با این کد تونستم مشکلمو حل کنم soheila_1643
خب اونموقع DMO رو میخاید چیکار
اینکه شد کلا TSQL