PDA

View Full Version : مشکل در بکاپ یا کانکشن استرینگ؟



md_davari
دوشنبه 24 مرداد 1390, 12:56 عصر
با سلام خدمت شما عزیزان
من برای بکاپ گیری از کانکشن استرینگ زیر استفاده میکنم
@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\myDatabase.mdf;
Initial Catalog=myDatabase;Integrated Security=True;User Instance=True";

و کد بکاپ گیری به صورت زیر است
string command = "BACKUP DATABASE myDatabase TO DISK='H:/dbBak/myDB.BAK '";

string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\myDatabase.mdf;
Initial Catalog=myDatabase;Integrated Security=True;User Instance=True";


SqlConnection conn = new SqlConnection(connectionString);
SqlCommand com = new SqlCommand();
com.Connection = conn;
if (conn.State != ConnectionState.Open)
{
com.CommandText = command;
conn.Open();
com.ExecuteNonQuery();
conn.Close();
this.Cursor = Cursors.Default;
MessageBox.Show("تهیه نسخه پشتیبان با موفقیت به پایان رسید");

}
}
catch (Exception ex)
{
MessageBox.Show("Error Occured: " + ex.Message, "خطا");

}
ولی با پیغام خطای زیر مواجه میشم
Unable to open the physical file "D:\Documents and Settings\smm\My Documents\Visual Studio 2008\Projects\backup_test\backup_test\bin\Debug\my Database.mdf". Operating system error 32: "32(error not found)".
Cannot attach the file 'D:\Documents and Settings\smm\My Documents\Visual Studio 2008\Projects\backup_test\backup_test\bin\Debug\my Database.mdf' as database 'myDatabase'.
میتونید به من کمک کنید
خیلی گشتم ولی عیبم را پیدا نکردم.
فایل فیزیکال موجوده و تمام اعمال insert , update, ... را با همین کانکشن استرینگ انجام میده ولی برای بک آپ گیر میده

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 13:13 عصر
دوست عزیز وقتی کانکشن اپلیکیشن شما به اینصورته


@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\myDatabase.mdf;
Initial Catalog=myDatabase;Integrated Security=True;User Instance=True";



یعنی دیتابیس به SQL SERVER همیشه اتچت نیس و فقط در زمان لازم SQL SERVER با دیتابیس شما ارتباط برقرار میکنه

در اینصورت یه کپی عادی فایلهای فیزیکی دیتابیس مورد رو حل میکنه و میشه بکاپ گیری

استفاده از دستورات TSQL یا استفاده از SMO برای بکاپ گیری و بازیابی زمانی امکان پذیره که دیتابیس به SQL SERVER اتچت شده باشه

موفق باشید.

md_davari
دوشنبه 24 مرداد 1390, 14:51 عصر
ممنون از Esmail Solhkhah به خاطر پاسخ خوبش
می خواستم بدونم راهی نیست که با همین دستورات SQL بک آپ گرفت؟
من برا اتچ کردن اتوماتیک دیتابیس (مثلا موقع نصب پروژه در سیستم نهایی) راهی بلد نیستم.

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 15:21 عصر
اگه میخاین با کد دیتابیس رو اتچ کنید


CREATE DATABASE Archive ON (FILENAME = 'D:\SalesData\archdat1.mdf') FOR ATTACH ;

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 17:08 عصر
public static ArrayList GetDbNames(string serverConnectionString)
{
ArrayList ar = new ArrayList();
try
{
string query = @"sp_databases";
SqlConnection con = new SqlConnection(serverConnectionString);
SqlCommand cmd = new SqlCommand(query, con);
cmd.CommandType = CommandType.StoredProcedure;
if (con.State != ConnectionState.Open)
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
ar.Add(dr["Database_Name"].ToString());
}
dr.Close();
con.Close();
cmd.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ar;
}


public static bool DataBaseExists(string DataBaseName, string ServerConnectionString)
{
bool result = false;
System.Collections.ArrayList ar = GetDbNames(ServerConnectionString);
foreach (var dbname in ar)
{
if (dbname.ToString().ToLower() == DataBaseName.ToLower())
result = true;
}
return result;
}

private void button4_Click(object sender, EventArgs e)
{
string ServerConnectionString = @"Data Source = .\sqlexpress; Initial Catalog = master; Integrated Security = sspi;";
if (!DataBaseExists("MyDatabaseName",ServerConnectionString))
{
// do Attacht Code
}
}

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 17:11 عصر
کد بالا برا سناریوی زیره:

نیاز داریم اول برنامه چک کنیم که اگه دیتابیس اتچ نباشه اونو اتچ کنیم.

md_davari
دوشنبه 24 مرداد 1390, 17:38 عصر
در کد بالا یک storeProcedure به نام sp_databases وجود داره اگه ممکنه کد query آن را بگذراید

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 17:40 عصر
دوست عزیز این استور پروسیجر جزو استور پروسیجرهای دیتابیس مستره

query شو میخای چیکار؟

md_davari
دوشنبه 24 مرداد 1390, 17:43 عصر
ببخشید
تازه متوجه شدم که قضیه از چه قراره.
حل شد
متشکرم