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

## bachebahal_1363

سام خدمت دوستان
من کلی در تاپیک های سایت جستجو کردم اما هیچ کدوم راه دقیق و کاملی رو از گرفتن backup و restore از دیتابیس attach شده به برنامه به من ارائه نکرد
برای مثال یا قبل از گرفتن پشتیبان باید بانک اطلاعاتی را جستجو کردن و سپس انتخاب کرد
من میخواهم فقط با زدن یک کلیک و پرسیدن مسیر ذخیره پشتیبان بانک بدون انتخاب دیتابیسهای موجود در شبکه و یا در کلاینت از بانک اطلاعاتی خودبرنامه یک پتیبان تهیه کند 
اگر کسی اطلاعاتی داره کمک کنه

----------


## hdv212

من دقیقا متوجه منظور شما نشدم، ولی برای backup کردن میتونید از این دستور استفاده کنید :
BackUp Database :

BACKUP DATABASE [mydb] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\mydb.bak' WITH 
NOFORMAT, NOINIT,  NAME = N'mydb-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
برای Restore کردن هم میتونید از این دستور استفاده کنید :
Restore Database :

RESTORE DATABASE [mydb] FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\mydb.bak' WITH  
FILE = 1,  NOUNLOAD,  STATS = 10

----------


## bachebahal_1363

> من دقیقا متوجه منظور شما نشدم، ولی برای backup کردن میتونید از این دستور استفاده کنید :
> BackUp Database :
> 
> BACKUP DATABASE [mydb] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\mydb.bak' WITH 
> NOFORMAT, NOINIT,  NAME = N'mydb-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
> برای Restore کردن هم میتونید از این دستور استفاده کنید :
> Restore Database :
> 
> RESTORE DATABASE [mydb] FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\mydb.bak' WITH  
> FILE = 1,  NOUNLOAD,  STATS = 10


منظور من دقیقا این هست که در یک برنامه Windows application C # یک فایل SQl به صورت Attach در برنامه من وجود دارد . در واقع از SQLExpress استفاده می کنم و از SQL SERVER استفاده نمی کنم به این معنی که برای مثال در یک کامپیوتر کلاینت امکان داده چندین SERVER موجود باشه و یا در بعضی از برنامه ها مانند برنامه که در پایین گذاشتم ابتدا باید SERVER های موجود در کلاینت را جستجو کرد و سپس بانک اطلاعاتی مورد نظر را انتخاب و از آن پشتیبان تهیه کرد . اما نیاز من این نیست که جستجویی انجام بشه و فقط می خواهم از بانک اطلاعاتی برنامه خودم یک پشتیبان تهیه کنم. 
در مورد راه های ارائه شده از طرف شما ؛ برنامه هایی که به صورت Database Attachment هستند , امکان استفاده از این دستور را ندارد چون دستور به صورت ADO نمی توان استفاده کرد و باید به صورت T-SQL در خود SQL SERVER از آن استفاده کرد . در برنامه من نیازی به نصب SQL SERVER در سیستم کلاینت نمی باشد و فقط با نصب نرم افزار خود برنامه یک دیتابیس به صورت درون برنامه ای یا Attachment می باشد که برنامه از آن استفاده می کند.

----------


## hdv212

> منظور من دقیقا این هست که در یک برنامه Windows application C # یک فایل SQl به صورت Attach در برنامه من وجود دارد . در واقع از SQLExpress استفاده می کنم و از SQL SERVER استفاده نمی کنم به این معنی که برای مثال در یک کامپیوتر کلاینت امکان داده چندین SERVER موجود باشه و یا در بعضی از برنامه ها مانند برنامه که در پایین گذاشتم ابتدا باید SERVER های موجود در کلاینت را جستجو کرد و سپس بانک اطلاعاتی مورد نظر را انتخاب و از آن پشتیبان تهیه کرد . اما نیاز من این نیست که جستجویی انجام بشه و فقط می خواهم از بانک اطلاعاتی برنامه خودم یک پشتیبان تهیه کنم.


شما وقتی از ConnectionString مخصوص خودتون استفاده میکنید، فقط به دیتابیس خودتون دسترسی دارید(البته فقط برای ویرایش Express این امر امکان پذیر است)، نیازی به جستجوی دیتابیس های دیگه ندارید.




> در مورد راه های ارائه شده از طرف شما ؛ برنامه هایی که به صورت Database Attachment هستند , امکان استفاده از این دستور را ندارد چون دستور به صورت ADO نمی توان استفاده کرد و باید به صورت T-SQL در خود SQL SERVER از آن استفاده کرد . در برنامه من نیازی به نصب SQL SERVER در سیستم کلاینت نمی باشد و فقط با نصب نرم افزار خود برنامه یک دیتابیس به صورت درون برنامه ای یا Attachment می باشد که برنامه از آن استفاده می کند.


شما نه تنها میتونید این دستور رو به صورت Command توسط Ado اجرا کنید، بلکه کلیه ی دستورات T-Sql رو هم میتونید توسط Ado اجرا کنید.

----------


## gdevnb

> منظور من دقیقا این هست که در یک برنامه Windows application C # یک فایل SQl به صورت Attach در برنامه من وجود دارد . *در واقع از SQLExpress استفاده می کنم* و از SQL SERVER استفاده نمی کنم به این معنی که برای مثال در یک کامپیوتر کلاینت امکان داده چندین SERVER موجود باشه و یا در بعضی از برنامه ها مانند برنامه که در پایین گذاشتم ابتدا باید SERVER های موجود در کلاینت را جستجو کرد و سپس بانک اطلاعاتی مورد نظر را انتخاب و از آن پشتیبان تهیه کرد . اما نیاز من این نیست که جستجویی انجام بشه و فقط می خواهم از بانک اطلاعاتی برنامه خودم یک پشتیبان تهیه کنم. 
> در مورد راه های ارائه شده از طرف شما ؛ برنامه هایی که به صورت Database Attachment هستند , امکان استفاده از این دستور را ندارد چون دستور به صورت ADO نمی توان استفاده کرد و باید به صورت T-SQL در خود SQL SERVER از آن استفاده کرد . در برنامه من نیازی به نصب SQL SERVER در سیستم کلاینت نمی باشد و فقط با نصب نرم افزار خود برنامه یک دیتابیس به صورت درون برنامه ای یا Attachment می باشد که برنامه از آن استفاده می کند.


Sql Express یکی از ورژنهای Sql Server هستش. وحتی اگه شما از Sql Express هم استفاده کنید در سیستم مقصد نیازه  Sql Server Engine نصب بشه.
دستور فوق در برنامه شما هم میتونه جواب بده(Using Ado.net)

----------


## bachebahal_1363

من برنامه خودم رو بر روی کامپیوتر های مختلف تست کردم و نیازی به نصب SQL Engin  نیست 
برای مثال نرم افزار حسابداری HOLO که بر روی یک سیستم نصب می شه و توسط دلفی نوشته شده بدون اینکه لازم باشه در کامپیوتر شما SQL با هر ورژنی نصب باشه دیتابیسی داره که نسبت به اون استفاده می کنه . 
اگر شما برنامه ای به صورت آموزشی دارین که من بتونم از اون ایده بگیرم ممنون می شم تو سایت بزارین

----------


## bachebahal_1363

> شما وقتی از ConnectionString مخصوص خودتون استفاده میکنید، فقط به دیتابیس خودتون دسترسی دارید(البته فقط برای ویرایش Express این امر امکان پذیر است)، نیازی به جستجوی دیتابیس های دیگه ندارید.
> 
> 
> شما نه تنها میتونید این دستور رو به صورت Command توسط Ado اجرا کنید، بلکه کلیه ی دستورات T-Sql رو هم میتونید توسط Ado اجرا کنید.


درسته امکان استفاده از ADO به صورت SQLCOmmand هست اما شما در هر صورت برای این کار باید Connection خودتون رو Open کنید تا اتصال ADO با دیتابیس برقرار بشه و زمانی که Connection باز باشه دستور BACKUP و یا RERSTOR کار نمی کنه چون در این حالت باید CONNECTION رو Close کنید .

----------


## hdv212

> درسته امکان استفاده از ADO به صورت SQLCOmmand هست اما شما در هر صورت برای این کار باید Connection خودتون رو Open کنید تا اتصال ADO با دیتابیس برقرار بشه و زمانی که Connection باز باشه دستور BACKUP و یا RERSTOR کار نمی کنه چون در این حالت باید CONNECTION رو Close کنید .


اوووه! حالا فهمیدم مشکل شما چیه، درسته در صورتی که Connection شما برای دیتابیس مورد نظر باز باشه شما نمیتونید این عملیات رو انجام بدید، اما این کار راه حل داره، شما قبل از دستورات T-Sql این خط کد رو اضافه کنید :
use master
go
در این حالت، در Connection جاری، دیتابیس شما از حالت استفاده خارج میشه و به دیتابیس master سوییچ میشه، حالا میتونید کارتون رو انجام بدید.

----------


## gdevnb

> من برنامه خودم رو بر روی کامپیوتر های مختلف تست کردم و نیازی به نصب SQL Engin  نیست 
> برای مثال نرم افزار حسابداری HOLO که بر روی یک سیستم نصب می شه و توسط دلفی نوشته شده بدون اینکه لازم باشه در کامپیوتر شما SQL با هر ورژنی نصب باشه دیتابیسی داره که نسبت به اون استفاده می کنه . 
> اگر شما برنامه ای به صورت آموزشی دارین که من بتونم از اون ایده بگیرم ممنون می شم تو سایت بزارین


این چیزی که شما میگید هم عجیبه و هم جالب. ولی احتمالاً یه ربطی به SqlExpress داره.
توجه کنید که حداکثر حجم دیتابیس در  این ورژن از Sql محدوده(2G)
من این مطلب رو تو یه سایت خوندم که داشت RDBMS ها با هم مقایسه میکرد. دوستان اگه نظری در استفاده از این روشی که دوستمون گفتن دارن اینجا در موردش بحث کنیم.
بعد یه سوال
برای چی از ADO استفاده میکنی؟

----------


## bachebahal_1363

> این چیزی که شما میگید هم عجیبه و هم جالب. ولی احتمالاً یه ربطی به SqlExpress داره.
> توجه کنید که حداکثر حجم دیتابیس در  این ورژن از Sql محدوده(2G)
> من این مطلب رو تو یه سایت خوندم که داشت RDBMS ها با هم مقایسه میکرد. دوستان اگه نظری در استفاده از این روشی که دوستمون گفتن دارن اینجا در موردش بحث کنیم.
> بعد یه سوال
> برای چی از ADO استفاده میکنی؟


ازنظراستفاده از ADO به نظر من بهترین راه برقراری ارتباط با دیتابیس ADO هست و همچنین سریع ترینش . درمورد حجم استفاده ازدیتابیس هم در ورژن 2008 به 4Gb ارتقا پیدا کرده و امکان ذخیره اطلاعات تا 4Gb رو داره . من حتی با همین ورژن ذخیره فایل های تصویری رو هم امتحان کردم و به هیچ مشکلی برخورد نکردم حتی مشکل لود و یا ذخیره اطلاعات و سرعتی بسیار عالی برای این کار رو داره . یک نمونه از استفاده از SQLExpress رو به صورت فایل ضمیمه قرار دادم که استفاده کنید .
https://barnamenevis.org/attach...2&d=1189415836

----------


## Mahdi.Kiani

> برای مثال نرم افزار حسابداری HOLO که بر روی یک سیستم نصب می شه و توسط دلفی نوشته شده بدون اینکه لازم باشه در کامپیوتر شما SQL با هر ورژنی نصب باشه دیتابیسی داره که نسبت به اون استفاده می کنه .


MSDE را نصب می کنه ...


پ و :
اگه یه روز خسته از هر کاری شده بودین و خواستین کمی استراحت کنین و بخندین زنگ بزنین پشتیبانی هولو ... مطمئن باشین که دقایقی به یاد ماندنی را براتون فراهم می کنه و روحتون را برای لحاظی شاد می کنه  :لبخند گشاده!:

----------


## gdevnb

> من برنامه خودم رو بر روی کامپیوتر های مختلف تست کردم و نیازی به نصب SQL Engin  نیست


لطف کن و پروژتو بزار ما هم تست کنیم
با تشکر.

----------


## bachebahal_1363

> لطف کن و پروژتو بزار ما هم تست کنیم
> با تشکر.


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

----------


## gdevnb

تو قسمت سی شارپ هر لحظه 10 تا پست جابجا میشه اگه لینکشو بزاری ممنون میشم.

----------


## bachebahal_1363

> تو قسمت سی شارپ هر لحظه 10 تا پست جابجا میشه اگه لینکشو بزاری ممنون میشم.


https://barnamenevis.org/attach...2&d=1189415836

----------


## gdevnb

> https://barnamenevis.org/attach...2&d=1189415836


bachebahal_1363 عزیز روی لینکی که گذاشتی کلیک کن!
منتظرم.

----------


## xxxxxxxxxx

تایپیم 10 لینکش سالم بود و دانلود شد.

----------


## Mahdi-563

در رابطه با نرم افزار هلو که دوستان بحث کردن چیز عجیبی نیست و هلو در نسخه جدیدش فقط بعضی از جداولش رو برای امنیت بیشتر اومده تبدیل به اس کیو ال کرده و مابقی جداول پادکس می‌بباشد که می‌تونم به جرعت بگم این موتور که دیگه منسوخ شده و اینتربیس جاشو گرفته تقریبا با کپی یه سری dll روی سیستم طرف به راحتی کار میکنه ولی باز تاکید می کنم که این موتور ارزش استفاده نداره

----------


## bachebahal_1363

> bachebahal_1363 عزیز روی لینکی که گذاشتی کلیک کن!
> منتظرم.


نمی دونم چرا اینجوری می شه اما در تاپیک 10 که فرستادم کار می کنه اما دوباره فایل Zip شدش رو براتون می زارم

----------


## bachebahal_1363

> در رابطه با نرم افزار هلو که دوستان بحث کردن چیز عجیبی نیست و هلو در نسخه جدیدش فقط بعضی از جداولش رو برای امنیت بیشتر اومده تبدیل به اس کیو ال کرده و مابقی جداول پادکس می‌بباشد که می‌تونم به جرعت بگم این موتور که دیگه منسوخ شده و اینتربیس جاشو گرفته تقریبا با کپی یه سری dll روی سیستم طرف به راحتی کار میکنه ولی باز تاکید می کنم که این موتور ارزش استفاده نداره


من با پادکس کار نکردم اما SQLExpress تنها خوبی که داره لازم به هیچ گونه اضافه کردن dll به سیستم کلاینت نمی باشد و تنها با نصب DotNetFramwork 2.0 or 3.0 or 3.5 می تونید به راحتی از اون استفاده کنین

----------


## gdevnb

> من با پادکس کار نکردم اما SQLExpress تنها خوبی که داره لازم به هیچ گونه اضافه کردن dll به سیستم کلاینت نمی باشد و تنها با نصب DotNetFramwork 2.0 or 3.0 or 3.5 می تونید به راحتی از اون استفاده کنین


دوستان عزیز در استفاده از SQLExpress  یا MSDE مراقب باشید.این دوسری محدودیت حجم بانک اطلاعاتی دارند تا 1 یا 2 G و محدودیت های دیگه.
البته فکر کنم با split کردن فایلهای بانک اطلاعاتی SqlServer به فایلهای ndf بتونید از این محدودیت خلاص بشید.

----------


## bachebahal_1363

مثل اینکه اصلا از سوالی که من مطرح کردم داریم خارج می شیم 
کسی نمونه برنامه ای ، کدی ، چیزی نداره یه کمکی به ما بکنه؟

----------


## gdevnb

> مثل اینکه اصلا از سوالی که من مطرح کردم داریم خارج می شیم 
> کسی نمونه برنامه ای ، کدی ، چیزی نداره یه کمکی به ما بکنه؟


دوست عزیز هیچ کار خاصی لازم نیست انجام بدید .
فقط پروژه ای که از این بانک دراه استفاده میکنه رو ببند.
بعد فایلتو کپی کن تو مکانی که میخوای پشتیبان اونجا باشه.

----------


## linux

> دوستان عزیز در استفاده از SQLExpress یا MSDE مراقب باشید.این دوسری محدودیت حجم بانک اطلاعاتی دارند تا 1 یا 2 G و محدودیت های دیگه.
> البته فکر کنم با split کردن فایلهای بانک اطلاعاتی SqlServer به فایلهای ndf بتونید از این محدودیت خلاص بشید.


محدودیت 4 گیگابایتی دارند، شما نگران این مورد نشو ، هیچ شرکتی که کار حسابداری می کنه در طول 10 سال مالی هم به این محدودیت نمی رسه.

----------


## linux

> مثل اینکه اصلا از سوالی که من مطرح کردم داریم خارج می شیم 
> کسی نمونه برنامه ای ، کدی ، چیزی نداره یه کمکی به ما بکنه؟


ببین راحترین کار برای شما استفاده از smo هست یک جستجو تو گوگل بکنید،کلی مطلب پیدا می کنید.

----------


## bachebahal_1363

> ببین راحترین کار برای شما استفاده از smo هست یک جستجو تو گوگل بکنید،کلی مطلب پیدا می کنید.


smo در مورد Sql Server قابل اجراست و کلیه کدهاش رو امتحان کردم اما در مورد دیتابیس Attach شده کار نمی کنه

----------


## linux

> smo در مورد Sql Server قابل اجراست و کلیه کدهاش رو امتحان کردم اما در مورد دیتابیس Attach شده کار نمی کنه


می توانید استفاده کنید، http://blogs.msdn.com/sqlexpress/arc...instances.aspx این لینک را ببنید
این هم کدش

using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
 
 
namespace CreateRANU
{
classProgram
{
staticvoid Main(string[] args)
{
BackupDatabase();
RestoreBackup();
}
publicstaticvoid BackupDatabase()
{
string sConnect = Properties.Settings.Default.BackupConnectionString  ;
string dbName;
using (SqlConnection cnn = newSqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
Console.WriteLine(sv.InstanceName.ToString());
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@"C:\AppDataBackup\SampleBackup.bak", DeviceType.File);
// Create the backup informaton
Backup bk = new Backup();
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.BackupSetDescription = "SQL Express is a great product!";
bk.BackupSetName = "SampleBackupSet";
bk.Database = dbName;
bk.ExpirationDate = newDateTime(2007, 5, 1);
bk.LogTruncation = BackupTruncateLogType.Truncate;
// Run the backup
bk.SqlBackup(sv);
Console.WriteLine("Your backup is complete.");
}
}
publicstaticvoid RestoreBackup()
{
string sConnect = Properties.Settings.Default.BackupConnectionString  ;
string dbName;
using (SqlConnection cnn = newSqlConnection(sConnect))
{
cnn.Open();
dbName = cnn.Database.ToString();
cnn.ChangeDatabase("master");
ServerConnection sc = new ServerConnection(cnn);
Server sv = new Server(sc);
// Check that I'm connected to the user instance
Console.WriteLine(sv.InstanceName.ToString());
// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem(@"C:\AppDataBackup\SampleBackup.bak", DeviceType.File);
// Create the restore object
Restore resDB = new Restore();
resDB.Devices.Add(bdi);
resDB.NoRecovery = false;
resDB.ReplaceDatabase = true;
resDB.Database = dbName;
// Restore the database
resDB.SqlRestore(sv);
Console.WriteLine("Your database has been restored.");
}
}
publicstaticvoid CreateDatabase()
{
using (SqlConnection cn = newSqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True;Connection Timeout=60"))
{
cn.Open();
SqlCommand cmd = newSqlCommand("CREATE DATABASE forumTest1", cn);
cmd.ExecuteNonQuery();
SqlConnection cn2 = newSqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True;AttachDbFilename=|DataDirectory|\for  umTest1.mdf;User Instance=True;Connection Timeout=60");
cn2.Open();
}
}
}
}

----------


## gdevnb

> smo در مورد Sql Server قابل اجراست و کلیه کدهاش رو امتحان کردم اما در مورد دیتابیس Attach شده کار نمی کنه


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


> محدودیت 4 گیگابایتی دارند، شما نگران این مورد نشو ، هیچ شرکتی که کار حسابداری می کنه در طول 10 سال مالی هم به این محدودیت نمی رسه.


linux جان ممنون از توجهت , ولی کلی گفتم منظورم کار حسابداری نبود. هر چند که بعضی از پروژه های حسابداری زودتر از اینا به این حجم می رسن.
در مورد فایل ndf آیا نمیشه با Split کردن دیتابیس این محدودیت پیش نیاد؟

----------


## bachebahal_1363

> می توانید استفاده کنید، http://blogs.msdn.com/sqlexpress/arc...instances.aspx این لینک را ببنید
> این هم کدش
> 
> using System;
> using System.Data.SqlClient;
> using Microsoft.SqlServer.Management.Common;
> using Microsoft.SqlServer.Management.Smo;
>  
>  
> ...


linux  جان یک مشکلی من در نوشتن کدهای بالا دارم . اون هم در قسمت 
Microsoft.SqlServer.Management.Common;
هست . من زمانی که reference  ، smo رو به برنامه اضافه می کنم فقط دو قسمت زیر را می توان using کرد و قسمت common موجود نمی باشد . 
using Microsoft.SqlServer.Management.Nmo;
using Microsoft.SqlServer.Management.Smo;
همچنین در قسمت زیر برنامه به من ایراد می گیره که ServerConnection وجود ندارد لطفا reference اون رو به برنامه اضافه کنید . 
ServerConnection sc = new ServerConnection(cnn);

----------


## bachebahal_1363

آقای linux درباره مسئله ای که من مطرح کردم نظری ندارین؟

----------


## bachebahal_1363

> bachebahal_1363 عزیز من پروژه ای رو که شما گذاشته بودید رو دانلود کردم و در مورد بک آپ زمانی که برنامه ات در حال اجرا نیست خیلی راحت با کپی پیست کارت راه میفته.
> 
> linux جان ممنون از توجهت , ولی کلی گفتم منظورم کار حسابداری نبود. هر چند که بعضی از پروژه های حسابداری زودتر از اینا به این حجم می رسن.
> در مورد فایل ndf آیا نمیشه با Split کردن دیتابیس این محدودیت پیش نیاد؟


gdevnb عزیز حرف شما کاملا درسته اما حساب کنید بنده یک برنامه نوشتم به یک اداره دادم بعد به یوزر می گم هر موقع خواستی backup بگیری برو فلان فایل رو از فلان جا پیداش کن بعد کپیش کن هر جا می خوای بعد دوباره اگه خواستی ازش استفاده کنی دوباره برش گردون همون جا که بود . 
به نظر شما این واقعا وجهه یک برنامه نویسو پائین نمیاره ؟

----------


## bachebahal_1363

> می توانید استفاده کنید، http://blogs.msdn.com/sqlexpress/arc...instances.aspx این لینک را ببنید
> این هم کدش
> 
> using System;
> using System.Data.SqlClient;
> using Microsoft.SqlServer.Management.Common;
> using Microsoft.SqlServer.Management.Smo;
>  
>  
> ...


آقای linux من واقعا به این موضوع احتیاج دارم که تو برنامم یک backup داشته باشم و واقعا گیر کردم . اگر امکان داره بهم کمک کنید.

----------


## smt_414

سلام



> من واقعا به این موضوع احتیاج دارم که تو برنامم یک backup داشته باشم و واقعا گیر کردم . اگر امکان داره بهم کمک کنید.


اگه درست فهمیده باشم فقط بک آپ گیری و ریستور احتیاج دارید
یه نگاه به این بندازید

        //دستورات بک آپ
        void func_back_up()
        {
            SqlConnection objConnection = new SqlConnection(" ");
            SqlCommand objCommand_desire = new SqlCommand();
            objCommand_desire.CommandType = CommandType.Text;
            objCommand_desire.Connection = objConnection;
            objCommand_desire.CommandText = "BACKUP DATABASE x TO DISK ='" + آدرس + "'"; 
            objConnection.Open();
            objCommand_desire.ExecuteNonQuery();
            objConnection.Close();
        }

        //دستورات قطع ارتباط پایگاه
        void func_disconnect()
        {
            SqlConnection objConnection = new SqlConnection(" ");
            SqlCommand objCommand_desire = new SqlCommand();
            objCommand_desire.CommandType = CommandType.Text;
            objCommand_desire.Connection = objConnection;
            objCommand_desire.CommandText = "ALTER DATABASE x SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
            objConnection.Open();
            objCommand_desire.ExecuteNonQuery();
            objConnection.Close();
        }

        //دستورات ری استور
        void func_restore()
        {
            SqlConnection objConnection = new SqlConnection(" ");
            SqlCommand objCommand_desire = new SqlCommand();
            objCommand_desire.CommandType = CommandType.Text;
            objCommand_desire.Connection = objConnection;
            objCommand_desire.CommandText = "use master RESTORE DATABASE x FROM DISK ='" + آدرس + "'";
            objConnection.Open();
            objCommand_desire.ExecuteNonQuery();
            objConnection.Close();
        }


امیدوارم به کارتون بیاد

----------


## bachebahal_1363

> سلام
> 
> 
> اگه درست فهمیده باشم فقط بک آپ گیری و ریستور احتیاج دارید
> یه نگاه به این بندازید
> 
>         //دستورات بک آپ
>         void func_back_up()
>         {
> ...


ممنون از پاسختون اما زمانی که این کد رو اجرا می کنم ایراد زیر رو به من می گیره :
User does not have permission to alter database 'database1', or the database does not exist.
ALTER DATABASE statement failed.

----------


## smt_414

سلام




> objCommand_desire.CommandText = "ALTER DATABASE x SET SINGLE_USER WITH ROLLBACK IMMEDIATE";





> User does not have permission to alter database 'database1', or the database does not exist.
> ALTER DATABASE statement failed


من به این مورد بر نخورده بودم
احتمالا این موضوع رو توی بخش SQL  مطرح کنید
دوستان سریعتر جواب می دن

موفق باشید

----------


## linux

> آقای linux درباره مسئله ای که من مطرح کردم نظری ندارین؟



The *Microsoft.SqlServer.Management.Common* namespace resides in the Microsoft.SqlServer.ConnectionInfo.dll assembly file.

----------


## gdevnb

> gdevnb عزیز حرف شما کاملا درسته اما حساب کنید بنده یک برنامه نوشتم به یک اداره دادم بعد به یوزر می گم هر موقع خواستی backup بگیری برو فلان فایل رو از فلان جا پیداش کن بعد کپیش کن هر جا می خوای بعد دوباره اگه خواستی ازش استفاده کنی دوباره برش گردون همون جا که بود . 
> به نظر شما این واقعا وجهه یک برنامه نویسو پائین نمیاره ؟


دوست عزیز من منظورم این نبود. شاید بد توزیح دادم.
شما با کد نویسی اول کانکشن رو close میکنی بعد با دستور کپی فایلهای مورد نظرتون رو هر جا که خواستید ذخیره می کنید.(پشتیبان)
برای بازگردانی پشتیبان همین راه رو عکس می کنید(بازگردانی)
File.Copy(source,dis,true)

----------


## majidf4252

من از این دستورات استفاده می کنم برای بک آپ گیری با اس کیو ال اکسپرس

 برای بک آپ گیری:
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("اشکال در ارتباط با بانک اطلاعاتی");
            }[/QUOTE]

برای بازیابی:

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("اشکال در ارتباط با بانک اطلاعاتی");
            }

بک آپ گیری میکنه ولی وقتی میخوام برگردونم اخطار:
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

لطفا راهنمایی کنید

----------


## kianoosh59

damet jilizzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

----------


## mehdi_RM

بک آپ گیری میکنه ولی وقتی میخوام برگردونم اخطار:
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

لطفا راهنمایی کنید 

منم تو Rstore  همین مشکل رو دارم

----------


## kh1387

با سلام
من هر وقت کد زیر رو اجرا می کنم 

USE [master];  RESTORE DATABASE [D:\C#‎\PhoneBooklet\bin\Debug\phone.mdf]
 FROM DISK = N'D:\C#‎\PhoneBooklet\bin\bkp1392-2-17.bak' WITH FILE = 1, NOUNLOAD, STATS = 10

پیام زیر رو بهم میده!!!



> بانک شما در حال استفاده می باشد!!


کسی می دونه مشکل از کجاست؟

----------


## kh1387

کسی از دوستان راهنمایی نمی کنند؟

----------

