PDA

View Full Version : مشکل با گرفتن backup در SqlExpress



Mr.Net
سه شنبه 24 اردیبهشت 1387, 16:33 عصر
با سلام.
من تو برنامه کدی نوشتم که باهاش از دیتابیس attach شده تو SqlExpress بک آپ می گیره ... اما پیغام می ده که همچین دیتابیسی با این نام وجود نداره.
کدی که نوشتم اینه:


query = "BACKUP DATABASE dbName TO DISK = N'E:\\aa.bak' WITH NOFORMAT, NOINIT, NAME = N'cc', SKIP, NOREWIND, NOUNLOAD, STATS = 10";

و این string رو به صورت یه کوری به دیتا بیس فرستادم.

کانکشن استرینگم هم اینه :


ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\dbName.M DF;Integrated Security=True;Connect Timeout=30;User Instance=True";


و اینم پیغامی که می ده:


Could not locate entry in sysdatabases for database 'dbName'. No entry found with that name. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally.


تو یه تاپیک دیدم برای یه نفر همچین مشکلی پیش اومده و اون در آخر این و گفته بود که: به جای اسم دیتا بیس آدرس کاملش رو نوشتم و درست شد ...
در حالی که من این کارو می کنم حل نمی شه !
من این تغییر رو تو query می کنم :


query = "BACKUP DATABASE 'C:\\dbName.MDF' TO DISK = N'E:\\dd.bak' WITH NOFORMAT, NOINIT, NAME = N'cc', SKIP, NOREWIND, NOUNLOAD, STATS = 10";


که این error رو می ده :


Incorrect syntax near 'C:\dbName.MDF'.


ممنون می شم کمکم کنین !
فردا باید پروژه رو تحویل بدم ! :گریه:

smt_414
سه شنبه 24 اردیبهشت 1387, 17:02 عصر
سلام

در مورد چند جا صحبت شده
این کد رو ببینید

objCommand_desire.CommandText = "BACKUP DATABASE X TO DISK ='" + save_back_up + "'";

save_back_up هم یک متغییر رشته ای برای آدرس دهی است
مثلا c:\x_back.Bak
امیدوارم با این کد مشکلتون حل شه


موفق باشید

Mr.Net
سه شنبه 24 اردیبهشت 1387, 17:59 عصر
ضمن تشکر از دوست گرامی ...
اما این کد فقط زمانی کار می کنه که دیتا بیس تو sqlServer 2000 باشه ...
چون من این تست رو زمانی که از SqlServer 2000 استفاده می کردم انجام دادم و دیدم که درست کار می کنه و بک آپ رو بهم می ده ...
اما زمانی که دیتا بیسم به صورت Attach شده به SqlExpress هستش پیغام می ده که X یا هر اسم ِ دیتا بیسی که به جای X قرار بگیره، وجود نداره ... و فکر می کنم هم درست می گه ... چون ما وقتی به SqlServer 2000 وصل می شیم در واقع به local وصل شدیم و اون موقع است که اسم دیتا بیس رو بعد از واژه ی Backup میاریم تا سیستم بفهمه از کدوم DB می خوایم Backup بگیریم ...
اما وقتی از SqlExpress استفاده می کنیم، تو کانکشن استرینگ دقیقاً دیتابیس مورد نظرمون رو مشخص می کنیم ... بنابراین به local وصل نیستیم بلکه به خود دیتابیس وصلیم ... بنابر این « توی» دبتا بیس من که مثلاً اسمش dbName هستش قاعدتاً دیتابیسی وجود نداره ...
(البته اینا چیزاییه که من فکر می کنم ... شاید اساتید محترم نظرشون چیز دیگست)

بنابراین ... مشکل من کماکان باقی است و ساعت ها به سرعت در حال گذر ...
کمککککککککککک.....

smt_414
سه شنبه 24 اردیبهشت 1387, 20:22 عصر
سلام

دیتا بیس که اینو براش امتحان کردم sql2005
و به درستی جواب داد

موفق باشید

Mr.Net
چهارشنبه 25 اردیبهشت 1387, 09:29 صبح
عزیزم عرض کردم خدمتتون که این قطعه کد برای SqlServer جواب می ده !
حالا می خواد ورژنش 2000 باشه یا 2005
اما وقتی دیتا بیس رو به SqlExpress خود دات نت Attach می کنی جواب نمی ده...
بازم می گم ... تو یه تاپیک گفته بود به جای اسم دیتا بیس جلوی واژه ی BACKUP DATABASE آدرس کامل دیتابیسی که Attach کردی رو بذار ولی دقیقاً نگفته بود چی رو باید بذاریم ...
منم اون کدی که تو پست اولم نوشتم رو گذاشتم جواب نداد ...
جون خودم امروز باید پروژه رو تحویل بدم ... کمک کنین لطفاً ...

hozouri
چهارشنبه 25 اردیبهشت 1387, 11:50 صبح
این کد رو امتحان کنید 100% جواب میده
البته از قسمت منوی Project\Add reference برگه com باید SQLDMO رو انتخاب کنید و فضاهای نامی زیر رو به پروژتون اضافه کنید :


using SQLDMO;
using System.Reflection;


Database2 database;
SQLServer2Class server;
Backup2 backup;

server = new SQLServer2Class();
backup = new Backup2Class();
server.LoginSecure = true;
server.Connect("(local)\\sqlexpress", Missing.Value, Missing.Value);
database = (Database2)server.Databases.Item("DataBaseName", Missing.Value);

backup.Database = database.Name;
backup.Files = Save;
backup.SQLBackup(server);
server.DisConnect();
backup = null;
server = null;

boof1364
چهارشنبه 25 اردیبهشت 1387, 18:00 عصر
آقای حضوری لطفا بیشتر در مورد دستورات کدی که نوشتید توضیح بدید.روی خط آخر و روی save خطا دارم.با تشکر

hozouri
چهارشنبه 25 اردیبهشت 1387, 18:19 عصر
آقای حضوری لطفا بیشتر در مورد دستورات کدی که نوشتید توضیح بدید.روی خط آخر و روی save خطا دارم.با تشکر

شرمنده اگر توضیح ندادم قسمت save مسیر ذخیره پشتیبان بانک اطلاعاتی است البته همون طور که میدونید باید این فایل ها با پسوند bak ذخیره بشن پس بجای save مثلاً می شه نوشت

backup.file=@"C:\database.bak";

خط آخر رو هم نادیده بگیرید اشتبا ها وارد شده بود

عذر من را بپذیرید

boof1364
پنج شنبه 26 اردیبهشت 1387, 10:17 صبح
با تشکر از توجهتون جناب حضوری.ولی من هنوز مشکل دارم.روی خط
database = (Database2)server.Databases.Item("DatabaseName", Missing.Value);
هر چیزی جای DatabaseName مذارم خطا داره و دیتا بیس رو نمی شناسه.:ناراحت:
[SQL-DMO]The name 'ADSL_Data.MDF' was not found in the Databases collection. If the name is a qualified name, use [] to separate various parts of the name, and try again.

Sal_64
پنج شنبه 26 اردیبهشت 1387, 10:36 صبح
(باید ببخشید که می پرم وسط بحثتون)
یک سوال این sqlexprees رو از کجا میشه پیدا کرد
توی cd برنامه sql2005 هست اگه نیست پش چرا کانکشن استرینگ اونها اینقدر شبیه
یا باید حتما از جایی دانلود بشه
ممنون میشم آدرس دانلودش رو اینجا بزارید:قلب:

hozouri
جمعه 27 اردیبهشت 1387, 09:49 صبح
با تشکر از توجهتون جناب حضوری.ولی من هنوز مشکل دارم.روی خط
database = (Database2)server.Databases.Item("DatabaseName", Missing.Value);
هر چیزی جای DatabaseName مذارم خطا داره و دیتا بیس رو نمی شناسه.:ناراحت:
[SQL-DMO]The name 'ADSL_Data.MDF' was not found in the Databases collection. If the name is a qualified name, use [] to separate various parts of the name, and try again.

از این پیغام خطای شما متوجه شدم شما نام بانک اطلاعاتی رو با پسوند وارد کردید احتیاجی به گذاشتن پسوند نیست فقط نام بانک اطلاعاتی.

hozouri
جمعه 27 اردیبهشت 1387, 09:54 صبح
(باید ببخشید که می پرم وسط بحثتون)
یک سوال این sqlexprees رو از کجا میشه پیدا کرد
توی cd برنامه sql2005 هست اگه نیست پش چرا کانکشن استرینگ اونها اینقدر شبیه
یا باید حتما از جایی دانلود بشه
ممنون میشم آدرس دانلودش رو اینجا بزارید:قلب:

منظورتون رو واضح تر بیان کنید اگه نصب خود SQL Server 2005 باید بگم باید هم SQL Server Managment Studio (SSMS) و هم SQL server 2005 رو نصب کنی تا بتونی با SQL 2005 کار کنی SSMS هم مثل Enterpris Manager است در SQL 2000 فقط کمی محیطش به دات نت رفته همین.

Sal_64
جمعه 27 اردیبهشت 1387, 11:01 صبح
برنامه هایی که با sql2005 نوشته می شن برای کار در سیستم کاربر احتیاج به یک نوع از پایگاه داده دارند(همونطور که برای sql200 باید msde رو باید برای کاربر نصب کرد)
برای sql2005 هم ظاهرا باید یه چیزی شبیه msde رو نصب کرد
اون چیز sqlexprees ؟:قلب:
چه طور میشه گیرش آورد؟

hozouri
جمعه 27 اردیبهشت 1387, 11:09 صبح
من خودم دارم باید بزاری ببینم چه فدر هجمشه باست یه جایی بذارم دانلود کنی

hozouri
جمعه 27 اردیبهشت 1387, 11:16 صبح
حجم Zip شدش شد 89 MB که از طریق اینترنت نمی تونم برسونم مگر اینکه بخوای برات پست کنم اگر هم همین دوروبرایی بهت برسونم.

Mr.Net
شنبه 28 اردیبهشت 1387, 08:30 صبح
ضمن تشکر از دوستان گرامی خصوصاً جناب حضوری عزیز .

من قبل از دیدن پست آقای حضوری با آزمون و خطای بسیار ، در نهایت سینتکس
مورد قبول SqlExpress رو فهمیدم و به نظرم بهترین و ساده ترین روش همینه ...
بدون نیاز به اضافه کردن ریفرنس :

کد مربوط به گرفتن بک آپ:



ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\dbName.M DF;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand();
try
{
con.Open();
string query = "BACKUP DATABASE [C:\\dbName.MDF] TO DISK = N'E:\\backup_db.BAK'";
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
}
catch
{
MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");
}


کد مربوط به بازیابی دیتا بیس :



ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\dbName.M DF;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand();
try
{
con.Open();
string query = "USE master; RESTORE DATABASE [C:\\dbName.MDF] FROM DISK = N'E:\\backup_db.BAK'";
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
}
catch
{
MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");
}

hozouri
شنبه 28 اردیبهشت 1387, 10:00 صبح
شاید یکی از مزایای زبان های برنامه نویسی این باشه که به تعداد آدم های زنده روی زمین روش منحصر به فردی برای نوشتن یک برنامه هستش ولی هرکی با یه روش از دیگر روش ها راحتتره.

Sal_64
دوشنبه 30 اردیبهشت 1387, 18:35 عصر
کسی جواب نداد که این sqlexpress رو باید از کجا دانلود کرد و یا حداقل چی رو جستجو کنم:ناراحت:
لطفا راهنمایی کنید :خجالت:

gdevnb
دوشنبه 30 اردیبهشت 1387, 19:59 عصر
sqlexpress همراه VS ورژن 2005 به بالا هستش.لازم نیست دانلود کنید

Sal_64
سه شنبه 31 اردیبهشت 1387, 15:00 عصر
sqlexpress همراه VS ورژن 2005 به بالا هستش.لازم نیست دانلود کن


برای اینکه در سیستم کاربر اون رو نصب کنیم
این امکان وجود داره که فایل exe این sqlexspress رو از داخل سی دی vs برداشته و به setup برنامه از طریق اینستال شیلد اضافه کرد؟؟:قلب:

top7news
چهارشنبه 01 خرداد 1387, 14:48 عصر
دوست عزیز لازم نیست از توی سی دی برداری چیزیو
موقع ساخت ستاپ با install shield خودش یه گزینه داره که همه فایلهایی که لازم داری رو میپرسه
بعدم من تو همین سایت یه مقاله خوندم که توش نوشته بود برنامه هایی که با install sheild ساخت میشن احتیاج به sql ندارن

Sal_64
پنج شنبه 02 خرداد 1387, 09:57 صبح
یعنی این sqlexpress داخل اینستال شیلد هست ؟
ولی چرا حتی تو ورژن12 این اینستال شیلد برای sql2000 تمهیدات ویژه ای در نظر گرفته شده
ولی سر sql2005 بی کلاه مونده :عصبانی++:

gdevnb
پنج شنبه 02 خرداد 1387, 19:11 عصر
سلام
اگه قصد دارید SqlExpress رو بدون دخالت کاربر روی سیستم مقصد نصب کنید از InstallAware هم می تونید استفاده کنید. در قسمت ران تایم هاش SqlExpress رو تیک بزنید.
در ضمن سرعت نصب دات نت و SqlExpress در InstallAware به نسبت install shield بیشتر است.

Sal_64
پنج شنبه 02 خرداد 1387, 21:38 عصر
تشکر
بر طبق صحبت شما

از InstallAware هم می تونید استفاده کنیپس در اینستال شیلد هم وجود داره من تمام object های موجود رو دانلود و نصب کردم اما داخلشون sqlexpress نبود و همچنین آبجکتی که غیر فعال(کم رنگ) مونده باشه وجود نداره
دوستان می تونن بگن معادل این sqlexpress در InstallAware ، در اینستال شیلد چیه ؟
با تشکر:قلب:

gdevnb
جمعه 03 خرداد 1387, 02:50 صبح
سلام
اگه از آخرین ورژن IS استفاده می کنید
پروژه رو از نوع MSI انتخاب کنید بعد در قسمت Redistributable گزینه Microsoft Sql Server 2005 Express sp1
رو انتخاب کنید.

Sal_64
جمعه 03 خرداد 1387, 11:57 صبح
آقا یه دنیا ممنون:خجالت:

برای attach کردن دیتا بیس هم باید از طریق کد نویسی عمل کنیم درسته؟؟

و همچنین دات نت فریم ورک رو توی این نوع پروژه(basic MSI) چطور باید به ستاپ اضافه کرد؟؟

gdevnb
جمعه 03 خرداد 1387, 16:12 عصر
IS برای Attach کردن یه ویزارد داره که دیتابیس رو کامل برات رو سیستم مقصد Attach میکنه(Database Import Wizard)
در مورد سوال دوم در قسمت Redistributable گزینه Microsoft .NET Framework 2.0
رو انتخاب کنید.

Sal_64
جمعه 03 خرداد 1387, 17:20 عصر
فکر کنم زیادی آپدیتش کردم :لبخند:
دات نت فریم ورک 1 یا 1.1 و یا حتی 2 رو ندارم
فقط ورژن 3 هست
قاعدتا نباید ایرادی به وجود بیاد زمانی که با دات نت2 (vs2005 ) برنامه رو نوشتم
اونوقت روی سیستم کاربر ورژن 3 رو نصب کنم و برنامه درست کار کنه

همینطوره؟:قلب:

gdevnb
شنبه 04 خرداد 1387, 03:57 صبح
ورژن 3 شامل ورژن 2 بعلاوه wpf و ... هستش.
درنتیجه مشکلی پیش نمیاد.

Sal_64
چهارشنبه 08 خرداد 1387, 13:05 عصر
سلام
آقا من این sqlexpress رو به برنامم اضافه کردم
اما تقریبا تمام کارهایی رو که یه برنامه نویس برای نصب sql2005 باید پشت سر بزاره
رو در هنگام نصب برنامم باید انجام بدم
و این برای یک کاربر کار پر دردسر و طولانی هست
آیا شیوه ای برای نصب مخفی sqlexpress توسط اینستال شیلد وجود داره؟:قلب:

gdevnb
چهارشنبه 08 خرداد 1387, 14:25 عصر
سلام
با IS من تست نکردم . ولی همین کار رو با InstallAware هم میتونید انجام بدید.
در ضمن خودتون می تونید با کد نویسی همین کا رو انجام بدین.(اگه با کد نویسی در IS آشنایی دارید از این طریق هم میتونید)
به Help , SQLServer مراجعه کنید.