# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > دسترسی به داده ها (ADO.Net و LINQ و ...) >  برنامه ای برای backup و restore برای sqlserver توسط smo

## mohsen_csharp

با توجه به اینکه بسیاری از دوستان در زمینه backup و  restore مشکل داشتند، کلاسی در سی شارپ به کمک Microsoft.SqlServer.Management.Smo نوشتم که این عملیات را مدیریت می کند.چند نکته:
عملیات ساخت پایگاه داده ، backup و restore  در مسیرهای خاص مانند desktop انجام نمی شود (از محدودیت های SQL Server می باشد.)
این برنامه روند backup و restore را به درصد نمایش می دهد.
در شبکه از کامپیوتر کلاینت می توان با این برنامه به سرور متصل شد و عملیات مورد نظر را انجام داد ولی فراموش نکنید که باید مسیر عملیات محلی باشد یعنی اگر بنویسید c:\a.bak منظور درایو c سرور خواهد بود.
اگر عملیات restore قرار است انجام شود و پایگاه داده هدف موجود نباشد ابتدا آن را در مسیر دلخواه به کمک برنامه ایجاد کنید و سپس restore را روی آن انجام دهید.
این برنامه روی پایگاه داده هایی که دارای یک فایل data و یک فایل Log هستند به درستی کار می کند ولی اگه تعداد فایل های یک پایگاه داده بیشتر باشد باید تغییراتی در کد برنامه داده شود.
این برنامه روی sql server 2005 و sqlexpress آزمایش شده است از دوستان خواهشمند است مشکلات احتمالی این برنامه را به بنده گزارش دهند.

----------


## mohsen_csharp

از دوستانی که این برنامه رو دانلود کردن کسی نظری نداره.
آیا روی ورژن های مختلف 2000 و 2005 و 2008 کار می کنه؟

----------


## سجادحیدری

در vs 2008 اجرا میشه. ولی در 2005 نه چرا؟خودتون نوشتید؟ راسیتی ممنون بابت کد. منتظره چرا هستم.

----------


## mohsen_csharp

> در vs 2008 اجرا میشه. ولی در 2005 نه چرا؟خودتون نوشتید؟ راسیتی ممنون بابت کد. منتظره چرا هستم.


بله برنامه رو خودم نوشتم
منظورم من ورژن های مختلف SQLServer بود نه visual studio

----------


## سجادحیدری

کمی کد هاشو برام توضیخ می دید ؟

----------


## mohsen_csharp

این برنامه به صورت open source هست شما می تونی با بررسی کد ها به راحتی از نحوه کارکرد آن مطلع شوید. بگید کجاش نامفهوم هست تا برتون توضیح بدم.

----------


## ehemitsme

آقا خدا خیرتون بده.. ممنون

----------


## Ahmad_VB

سلام
یک سوال :
توی پروژه فایلی به نام SQLManagement.cs هست که کلی کدهای مختلف داخلشه !
این رو خودتون نوشتید یا اتوماتیک تولید شده و شما تغییرش دادید ؟
چون با VB می خوام اش !
راهی پیشنهاد می کنید ؟

----------


## mohsen_csharp

> یک سوال :
> توی پروژه فایلی به نام SQLManagement.cs هست که کلی کدهای مختلف داخلشه !
> این رو خودتون نوشتید یا اتوماتیک تولید شده و شما تغییرش دادید ؟


بله، همه کدهای داخل اونو خودم نوشتم.
فکر نکنم تبدیل کردنش به vb مشکل باشه.
هر جاش نامفهوم بود بگید تا توضیح بدم.

----------


## Ahmad_VB

نه تقریبا مفهومه ولی حجمش خیلی زیاده
ببینم چی میشه !

میگم راه ساده تری سراغ ندارید (کمتر کد ببره) ؟

----------


## mehran20_200

دوست عزيز ابتدا از به اشتراك گذاري اين پروژه تشكر مي كنم 
من با يك مشكل اساسي بر خورد كردم
هنگام تهيه نسخه پشتيبان از SQLExpress2005 با پيغام this DataBase cloes not exist مواجه مي شوم
امكان داره بفرماييد چگونه اين مشكل را بايد رفع كرد؟
با تشكر

----------


## mehran20_200

سلام دوست عزيز
من اين لينك را پيدا كردم و كد را تست كردم
http://blogs.msdn.com/sqlexpress/arc...instances.aspx
كاملا درست كار مي كند

چون من با كلاس شما آَشنايي ندارم امكان داره زحمت بكشيد و sqlexpress را هم به كلاس اضافه كنيد؟
فقط يك مورد:اگر فايل بكاپ از قبل موجود باشه به حجم آن اضافه مي شه(پس بايد چك كرد كه اگه فايل بكاپ از قبل موجود هستش ابتدا حذف بشه بعد بكاپ گيري انجام بشه)

با تشكر

----------


## HAMRAHSOFT.IR

روي اسكيول 2000 جواب نميده و خطا ميگير ميشه براي اونم درست كنيد؟

----------


## mohsen_csharp

> چون من با كلاس شما آَشنايي ندارم امكان داره زحمت بكشيد و sqlexpress را هم به كلاس اضافه كنيد


روي sqlExpreess 2005 به درستي كار مي كنه و هيچ مشكلي نداره.



> روي اسكيول 2000 جواب نميده و خطا ميگير ميشه براي اونم درست كنيد


با sql 2000 تست نكردم و فكر كنم با 2000 كار نكنه چون براي sql 2000 به جاي SMO از DMO استفاده مي شود.

----------


## hamidsina

خیلی آلی بود 
دستت درد نکنه

----------


## mohsen_f_b

سلام
روی 2008 به مشکل خوردم!

----------


## Merila_Rad

ممنون از برنامه اما من نمیتونم فضای 

using Microsoft.SqlServer.Management.Smo;
را اضافه کنم
یعنی وقتی مینویسم

using Microsoft.SqlServer.
بعد از گذاشتن نقطه فقط میتونم کلمه Server را اضافه کنم و کلمه Management ظاهر نمیشه
میتونید راهنماییم کنید

----------


## zizijoon

> سلام
> روی 2008 به مشکل خوردم!


 
با سلام وتشکر
من هم روی SQL SERVER 2008 امتحان کردم همین مشکل وجود داشت .

----------


## mohsen_csharp

> ممنون از برنامه اما من نمیتونم فضای 
> کد:
> using Microsoft.SqlServer.Management.Smo;
> را اضافه کنم
> یعنی وقتی مینویسم
> کد:
> using Microsoft.SqlServer.
> بعد از گذاشتن نقطه فقط میتونم کلمه Server را اضافه کنم و کلمه Management ظاهر نمیشه
> میتونید راهنماییم کنید


دوست عزیز شما باید رفرنس های مورد نظر رو اضافه کنی که تو عکس نمایش داده شده.



من هنوز sql 2008 نصب نکردم که ببینم مشکل از کجاست اگه فرصت کنم بررسی می کنم

----------


## araz_pashazadeh

با عرض سلام خدمت دوستان
من کد زیر را در C#‎‎‎‎‎‎‎‎‎ برای پشتیبان و بازیابی اطلاعات نوشتم ولی در مرحله نهایی با یک مشکل مواجه می شم دلیلشم نمی دونم.
خیلی جستجو کردم اما به نتیجه نرسیدم لطفا من را راهنمایی کنین.

using Microsoft.SqlServer.Server;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;privatestaticServer GetServer()
{
System.Data.SqlClient.SqlConnection TempConn = new System.Data.SqlClient.SqlConnection(
System.Configuration.ConfigurationManager.ConnectionStrings["BackupRestor_WFA_.Properties.Settings.LocalDataba  seConnectionString"].ConnectionString);
ServerConnection Conn = newServerConnection(TempConn);
Server myServer = newServer(Conn);
return myServer;
}
publicvoid BackupDataBase(string databaseName, string destinationPath)
{
lblBackup.Text = string.Format("Backup the {0} database!", databaseName);
Server myServer = GetServer();
Backup backup = newBackup();
backup.Action = BackupActionType.Database;
backup.Database = databaseName;
destinationPath = System.IO.Path.Combine(destinationPath, databaseName + ".bak");
backup.Devices.Add(newBackupDeviceItem(destinationPath, DeviceType.File));
backup.Initialize = true;
backup.Checksum = true;
backup.ContinueAfterError = true;
backup.Incremental = false;
backup.LogTruncation = BackupTruncateLogType.Truncate;
backup.PercentComplete += newPercentCompleteEventHandler(backup_PercentComplete);
backup.Complete +=
new Microsoft.SqlServer.Management.Common.ServerMessageEventHandler
(backup_Complete);
// Perform backup.
backup.SqlBackup(myServer);
}
//The event handlers
publicvoid backup_Complete
(object sender, Microsoft.SqlServer.Management.Common.ServerMessageEventArgs e)
{
lblBackup.Text = string.Format(e.ToString() + "% Complete");
}
publicvoid backup_PercentComplete(object sender, PercentCompleteEventArgs e)
{
lblBackup.Text = string.Format(e.Percent.ToString() + "% Complete");
}
privatevoid btnBackUP_Click(object sender, EventArgs e)
{
BackupDataBase("LocalDatabase.mdf", "c:\\aeh");
}

----------


## mohamad68

اینجا هم یه backup و restore با smo هست 
فکر کنم مفید باشه.

----------


## araz_pashazadeh

> اینجا هم یه backup و restore با smo هست 
> فکر کنم مفید باشه.


دوست عزیز من الان چند وقت دنبال پتیبان گیری از SQLEXPRESS هستم ولی همه کد گذاشتن راهنمایی کردن راهنمایی آنها درست هم هستش ولی غافل از این که همه این کدها روی سیستمی که SQL Server نصب سده کار می کنه نه SQLEXPRESS و در هنگام پشتیبان گیری همشون یک نوع خطا میده که در پیام قبلی ضمینه کردم.
لطفا مدیران سایت در مورد این مشکل من و دوستان را راهنمایی کنن :افسرده: 
ممنون میشم اگه کسی در این ضمینه من را یاری کنه :خیلی عصبانی:

----------


## mohsen_csharp

> دوست عزیز من الان چند وقت دنبال پتیبان گیری از SQLEXPRESS هستم ولی همه  کد گذاشتن راهنمایی کردن راهنمایی آنها درست هم هستش ولی غافل از این که  همه این کدها روی سیستمی که SQL Server نصب سده کار می کنه نه SQLEXPRESS و  در هنگام پشتیبان گیری همشون یک نوع خطا میده که در پیام قبلی ضمینه کردم.
> لطفا مدیران سایت در مورد این مشکل من و دوستان را راهنمایی کنن
> ممنون میشم اگه کسی در این ضمینه من را یاری کنه


با سلام
من برنامه رو دوباره تست کردم با SQLEXPRESS هیچ مشکلی نداره
احتمالا شما مسیر بکاپ گیری رو درست انتخاب نکردید
به عنوان مثال من مسیر بکاپ گیری رو در درایو C انتخاب کردم دقیقا همین ارور را داد
SQL با بعضی مسیرها مشکل داره مثل Desctop و یا ریشه یک درایو 
مسیر بکاپ گیری رو داخل یک فولدر در درایو C قرار بدین و تست کنید.
البته این مسیر باید از قبل وجود داشته باشه

----------


## araz_pashazadeh

من برنامه شما را اجرا کردم در همان اول کار هنگام برقراری ارتباط با خطا مواجه شدم در عکس ضمیمه کاملا مشخصه که من از چه کانکشی استفاده کردم و خطای هم که داده همون جا هستش البته ناگفته نماند من از ویندوز7 و SQLEXPRESS 2008 استفاده می کنم.
مشکل کار کجاست :خیلی عصبانی:

----------


## mohsen_csharp

من برنامه رو با sql express 2008 تست نکردم ولی دوستان گفتند که کلا با sql 2008 مشکل ورژن داره و اونو ساپورت نمی کنه

----------


## shocraneh

این برنامه خیلی عالیه .اما dll مربوطه به فرم add نمیشه ؟؟من خیلی عجله دارم

----------


## mohsen_csharp

سلام
این برنامه که DLL نداره فقط کافیه فایل SQLManagement.cs رو به پروژه ات Add کنی و یه بار پروژه رو Rebuildکن اونوقت کامپوننتش توی toolBox اضافه می شه و بکش روی فرم بزارش و ازش مانند مثالی که تو پست اول گذاشم استفاده کن

----------


## shocraneh

من اینکارو کردم اما از
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
خطا میگیره و کامپوننتی رو ADD  نمیکنه . احیانا نباید Refrence به برنامم اضافه کنم ؟؟

----------


## mansourii

------------

----------


## mehdi_7

چرا باید حتما یک پایگاه داده بسازه و بعد عملیات بک آپ / ری استور رو انجام بده!!!!

----------


## bahramkazemi

باتشکر از برنامه خوبتان 


من از sql2005 استفاده میکنم با xp مشکلی ندارد ولی در win7 کارنمکند    کمک فوری

----------


## bahramkazemi

*نقل قول: برنامه ای برای backup و restore برای sqlserver توسط smo* 
باتشکر از برنامه خوبتان 


من از sql2005 استفاده میکنم با xp مشکلی ندارد ولی در win7 کارنمکند کمک فوری

----------


## freehorn3000

من اینکارو کردم اما از
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
خطا میگیره و کامپوننتی رو ADD نمیکنه . احیانا نباید Refrence به برنامم اضافه کنم ؟؟

----------


## mmd2009

> من اینکارو کردم اما از
> using Microsoft.SqlServer.Management.Common;
> using Microsoft.SqlServer.Management.Smo;
> خطا میگیره و کامپوننتی رو ADD نمیکنه . احیانا نباید Refrence به برنامم اضافه کنم ؟؟


با سلام

بله شما نیاز دارید به این چند references :


    Microsoft.SqlServer.Smo
    Microsoft.SqlServer.SmoExtended
    Microsoft.SqlServer.Management.Sdk.Sfc
    Microsoft.SqlServer.ConnectionInfo

----------


## natilus

> با توجه به اینکه بسیاری از دوستان در زمینه backup و  restore مشکل داشتند، کلاسی در سی شارپ به کمک Microsoft.SqlServer.Management.Smo نوشتم که این عملیات را مدیریت می کند.چند نکته:
> عملیات ساخت پایگاه داده ، backup و restore  در مسیرهای خاص مانند desktop انجام نمی شود (از محدودیت های SQL Server می باشد.)
> این برنامه روند backup و restore را به درصد نمایش می دهد.
> در شبکه از کامپیوتر کلاینت می توان با این برنامه به سرور متصل شد و عملیات مورد نظر را انجام داد ولی فراموش نکنید که باید مسیر عملیات محلی باشد یعنی اگر بنویسید c:\a.bak منظور درایو c سرور خواهد بود.
> اگر عملیات restore قرار است انجام شود و پایگاه داده هدف موجود نباشد ابتدا آن را در مسیر دلخواه به کمک برنامه ایجاد کنید و سپس restore را روی آن انجام دهید.
> این برنامه روی پایگاه داده هایی که دارای یک فایل data و یک فایل Log هستند به درستی کار می کند ولی اگه تعداد فایل های یک پایگاه داده بیشتر باشد باید تغییراتی در کد برنامه داده شود.
> این برنامه روی sql server 2005 و sqlexpress آزمایش شده است از دوستان خواهشمند است مشکلات احتمالی این برنامه را به بنده گزارش دهند.


با سلام و احترام خدمت شما دوستان و استادان محترم
بنده مبتدی هستم و یه سوالی داشتم میخواستم بدونم از برنامه بالا برای سوال زیر میتونم استفاده کنم؟؟

سوال :*چطور می توانیم با استفاده از دستور (backup)در یک (sp )از طریق یک زبان برنامه نویسی مثل (vb.net) مسیر را از کامپیوتر (Server) به (local)تغییر دهیم?

با تشکر از شما*

----------


## natilus

> با سلام و احترام خدمت شما دوستان و استادان محترم
> بنده مبتدی هستم و یه سوالی داشتم میخواستم بدونم از برنامه بالا برای سوال زیر میتونم استفاده کنم؟؟
> 
> سوال :*چطور می توانیم با استفاده از دستور (backup)در یک (sp )از طریق یک زبان برنامه نویسی مثل (vb.net) مسیر را از کامپیوتر (Server) به (local)تغییر دهیم?
> 
> با تشکر از شما*


سلام 
کسی جواب سوال منو بلد نیست؟

----------

