PDA

View Full Version : تهیه backup از database در محیط C#



boof1364
دوشنبه 23 اردیبهشت 1387, 10:35 صبح
چگونه می توانم از SQL SERVER 2000)database) در محیط C#.NET نسخه پشتیبان یا backup تهیه کنم؟

hozouri
دوشنبه 23 اردیبهشت 1387, 11:04 صبح
برای این کار ابتدا باید از منوی Project گزینه Add Reference رو انتخاب کنی و از برگه Com گزینه Microsoft SQLDMO Object Library رو انتخاب و OK کنی.

برای BackUP باد کد زیر رو وارد کنی :
در قسمت بارگذاری فضاهای نامی قسمت زیر رو وارد کن


using SQLDMO;
using system.Reflection


کد زیر رو در سطر Puplic nameproject class form1:form وارد کن


private Database2 database;
private SQLServer2Class server;
private Backup2 backup;


بعد کد زیر رو مثلا برای رویداد Button بنویس تا BackUp گرفته شود


;()this.server=new SQLServer2Class
;()this.backup=new Backup2Class
;this.server.LoginSecure=true
;(this.server.connect("(local)",Missing.Value,Missing.Value
;(database=(Database2)server.Databases.Item("dbName",Misiing.Value
;backup.database=database.Name
"backup.Files=@"path file .bak
;(backup.SQLBackup(server
;()server.disConnect
;backup=null
;server=null


حواستون باشه در قسمت


"backup.Files=@"path file .bak


مسیر فایل بانک اطلاعاتی رو با پسوند bak وارد نمایید

hozouri
دوشنبه 23 اردیبهشت 1387, 11:08 صبح
برای این کار ابتدا باید از منوی Project گزینه Add Reference رو انتخاب کنی و از برگه Com گزینه Microsoft SQLDMO Object Library رو انتخاب و OK کنی.

برای BackUP باد کد زیر رو وارد کنی :
در قسمت بارگذاری فضاهای نامی قسمت زیر رو وارد کن


using SQLDMO;
;using system.Reflection


کد زیر رو در سطر Puplic nameproject class form1:form وارد کن


private Database2 database;
private SQLServer2Class server;
private restore2 Restor;


بعد کد زیر رو مثلا برای رویداد Button بنویس تا BackUp گرفته شود


;()this.server=new SQLServer2Class
;()this.restor=new Backup2Class
;this.server.LoginSecure=true
;(this.server.connect("(local)",Missing.Value,Missing.Value
;(database=(Database2)server.Databases.Item("dbName",Misiing.Value
;restor.database=database.Name
"restor.Files=@"path file .bak
;(restor.SQLBackup(server
;()server.disConnect
;restor=null
;server=null


حواستون باشه در قسمت


"restor.Files=@"path file .bak


مسیر فایل بانک اطلاعاتی رو با پسوند bak وارد نمایید

hozouri
دوشنبه 23 اردیبهشت 1387, 11:10 صبح
این مقاله دوبار وارد شد

top7news
دوشنبه 23 اردیبهشت 1387, 11:52 صبح
آقای حضوری(اگه درست خونده باشم) خیلی ممنون
واقعا مفید و مختطر و در عین حال کامل و پر مغز بود
ممنون

m.yazdian
پنج شنبه 12 آذر 1388, 08:03 صبح
دوستان اینجا کسی از user که باید با اون به دیتابس Connect بشیم چیزی نگفته...!!!

آیا همه این Backup - Restore را میشه با user غیر از sa هم انجام داد؟؟؟؟؟

hozouri
پنج شنبه 12 آذر 1388, 11:20 صبح
دوستان اینجا کسی از user که باید با اون به دیتابس Connect بشیم چیزی نگفته...!!!

آیا همه این Backup - Restore را میشه با user غیر از sa هم انجام داد؟؟؟؟؟

دوست عزیز بستگی به Permission های تعریف شده داره ...

noroozifar
شنبه 14 آذر 1388, 08:42 صبح
این کدهای که شما نوشتید برای 2005 یا 2008 هم جواب می دهد

siyavash_ghanbari
شنبه 14 آذر 1388, 11:17 صبح
سلام.
اگه sql server از نوع express باشه، اون وقت چطو باید عمل کرد ؟

siyavash_ghanbari
جمعه 20 آذر 1388, 12:21 عصر
جوابی نشنیدیم .... :بامزه: !
اگه sql server از نوع express باشه، اون وقت چطو باید عمل کرد ؟

samaram
یک شنبه 22 آذر 1388, 17:18 عصر
جوابی نشنیدیم .... :بامزه: !
اگه sql server از نوع express باشه، اون وقت چطو باید عمل کرد ؟

منم همین سوال رو دارم. لطفا یکی جواب بده. توی خط:


;(this.server.connect("(local)",Missing.Value,Missing.Value


بین پرانتز چی بنویسم تا درست شه؟

ghasedak_zb
جمعه 18 دی 1388, 12:33 عصر
سلام آقای حضوری ممنون ار مطلبتون
پروژه من با vs.2008 , sql sqrever 2000
کدهای بالا را گذاشتم در صفحه مربوطه اما به خط زیر ایراد می گیره

using system.reflection
پیغام زیر را می ده
Error 1 The type or namespace name 'system' could not be found (are you missing a using directive or an assembly reference?)

کل کدهای صفحه

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using SQLDMO;

using system.reflection;

using System.Windows.Forms;


namespace Anbar
{
public partial class Backup : Form

{
private Database2 database;
private SQLServer2Class server;
private Backup2 backup;
public Backup()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.server = new SQLServer2Class();
this.backup = new Backup2Class();
this.server.LoginSecure = true;
this.server.connect("(local)", Missing.Value, Missing.Value);
database = (Database2)server.Databases.Item("dbName", Misiing.Value);
backup.database = database.Name;
backup.Files = @"d:\\anbar.bak";
backup.SQLBackup(server);
server.disConnect();
backup = null;
server = null;
}
}
}


کجای کارم اشتباه
ممنون می شم جواب بدید
منتظرم

slashslash2009
جمعه 18 دی 1388, 13:00 عصر
دوست من اینو امتحان کن کارتو راه میندازه

private void Backup()
{
//readfile();
//پشتیبان گیری از بانک اطلاعاتی
SqlConnection con = new SqlConnection();


con.ConnectionString = "Data Source=.\\sqlexpress;Initial Catalog=databaseNAME;Integrated Security=True";
SqlCommand cmd = new SqlCommand();
try
{
con.Open();
//BACKUP DATABASE نام بانک اطلاعاتی TO DISK = 'مسیر پشتیبان گیری بانک اطلاعاتی'
string query = "BACKUP DATABASE databaseNAME TO DISK ='d:\\data\\Bkup" + (new PersianDate(DateTime.Now).ToString("D")) + ".BAK" + "'";
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("پشتیبان گیری انجام شد");
//Application.Exit();
}
catch
{
MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");
}

}پوشه data رو در درایو d درست کن شایدم خودش بسازه مطمعن نیستم

javadaskari
جمعه 18 دی 1388, 14:10 عصر
چرا اينقدر قضيه را پيچونديند:
کافي است دستور زير در sql اجرا شود ؟



BACKUP DATABASE <نام ديتابيس> TO DISK='مسير ذخيره'

baghaie
شنبه 22 خرداد 1389, 13:30 عصر
با سلام خدمت دوستان گرامی
من از کد پشتیبانگیری و بازگردانی شما استفاده کردم و خیلی مفید بود ولی من یک مشگل در restory دارم اونم اینکه برنامه من web Application است و من از SqlDataSource و GridView استفاده می کنم موقعی که می خواهم دیتابیس را Restory کنم با پیغام Can not restory Database because Database is in use مواجه می شم هر چه گشتم متدی برای بستن SqlDataSource پیدا نکردم ممنون می شم اگه راهنمایی کنید

csharpprogramer88
شنبه 22 خرداد 1389, 21:41 عصر
دوست عزيز من تاپيك شما را كامل نخوندم ولي از عنوان شما معلومه كه تاپيك زير كار شما را راه ميندازه http://barnamenevis.org/forum/showthread.php?t=218782&page=3

hojjatshariffam
یک شنبه 30 خرداد 1389, 11:59 صبح
سلام دوستان
لطفا یکی از دوستان حرفه ای این مشکل منو بررسی کنه که چطور میش حلش کرد
من از دیتا بیس بک آپ می گیرم ولی در هر دو حالت (از خود اس کیو ال سرور و از داخل سی شارپ (کد برنامه )) فقط به یک فایل خاص بک آپ می گیره
فایلی که در مسیر خود اس کیو ال سرور و در داخل دایرکتوری بک آپ هستش ، بک آپ می گیره ولی وقتی حتی این فایل رو به یه جای دیگه مانند F: کپی می کنم ارور زیر رو میده



TITLE: Microsoft SQL Server Management Studio
------------------------------

Backup failed for Server 'SERVER'. (Microsoft.SqlServer.SmoExtended)

------------------------------
ADDITIONAL INFORMATION:

System.Data.SqlClient.SqlError: Cannot open backup device 'F:\FullBackup.bak'. Operating system error 5(failed to retrieve text for this error. Reason: 1815). (Microsoft.SqlServer.Smo)

یعنی وقتی حتی از داخل برنامه مسیر

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\FullBackup .bak

رو انتخاب می کنم بک آپ با موفقیت گرفته میشه ولی وقتی همین فابل رو به مسیری مانند F:\FullBackup.bak کپی کردیم و این فایل رو انتخاب کردیم خطای بالا رو میده
آیا قابل حل شدن هست؟
از دوستان حرفه ای کسی نیست کمکمون کنه؟

esi_0o0
دوشنبه 03 آبان 1389, 20:27 عصر
از دوستان حرفه ای کسی نیست کمکمون کنه؟
سلام خدمت دوستان
بنده کد ی که برا گرفتن بک آپ از sql express 2008 نوشتم به صورت زیره



ServerConnection sc = new ServerConnection(Conn);
Server sv = new Server(sc);

// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem("C:\\back\\a.bak",DeviceType.File);

// Create the backup informaton
Microsoft.SqlServer.Management.Smo.Backup bk = new Backup();
//bk.PercentComplete += new PercentCompleteEventHandler(percentComplete);
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.PercentCompleteNotification = 1;
bk.BackupSetDescription = "sarjam";
bk.BackupSetName = "sarjam";
bk.Database = "sarjam";
//bk.ExpirationDate = DateTime.Now.AddDays(30);
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.FormatMedia = false;
bk.Initialize = true;
bk.Checksum = true;
bk.ContinueAfterError = true;
bk.Incremental = false;
// Run the backup
bk.SqlBackup(sv);
ولی در حین اجرا با خطای Backup failed for Server 'ADMIN\SQLEXPRESS'.
که ازfailed oparation exeption هستش
لطفاً کمکی در این مورد بکنین
ممنون میشم

mohamad68
دوشنبه 03 آبان 1389, 20:36 عصر
سلام خدمت دوستان
بنده کد ی که برا گرفتن بک آپ از sql express 2008 نوشتم به صورت زیره



ServerConnection sc = new ServerConnection(Conn);
Server sv = new Server(sc);

// Create backup device item for the backup
BackupDeviceItem bdi = new BackupDeviceItem("C:\\back\\a.bak",DeviceType.File);

// Create the backup informaton
Microsoft.SqlServer.Management.Smo.Backup bk = new Backup();
//bk.PercentComplete += new PercentCompleteEventHandler(percentComplete);
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.PercentCompleteNotification = 1;
bk.BackupSetDescription = "sarjam";
bk.BackupSetName = "sarjam";
bk.Database = "sarjam";
//bk.ExpirationDate = DateTime.Now.AddDays(30);
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.FormatMedia = false;
bk.Initialize = true;
bk.Checksum = true;
bk.ContinueAfterError = true;
bk.Incremental = false;
// Run the backup
bk.SqlBackup(sv);
ولی در حین اجرا با خطای Backup failed for Server 'ADMIN\SQLEXPRESS'.
که ازfailed oparation exeption هستش
لطفاً کمکی در این مورد بکنین
ممنون میشم

اینجا (http://irandevelopers.net/showthread.php?tid=70) رو ببین فکر کنم مشکلت حل بشه.

mahdi87_gh
دوشنبه 03 آبان 1389, 20:42 عصر
دوست عزیز در مورد بکاپ و ریستور از کامپوننتی که بنده نوشته ام استفاده کنید، کارتون رو خیلی راحت می کنه
http://barnamenevis.org/forum/showthread.php?p=1026701#post1026701

araz_pashazadeh
سه شنبه 04 آبان 1389, 16:14 عصر
دوست عزیز در مورد بکاپ و ریستور از کامپوننتی که بنده نوشته ام استفاده کنید، کارتون رو خیلی راحت می کنه
http://barnamenevis.org/forum/showthread.php?p=1026701#post1026701
با سلام خدمت شما دوست عزیز این کدی که شما نوشتن برای SQL Server درست کار میکنه.
من میخواستم از SQLEXPRESS پشتیبان بگیرم لطفا من را در این ضمینه راهنمایی کنین.

mahdi87_gh
سه شنبه 04 آبان 1389, 17:50 عصر
فرقی نمیکنه دوست عزیز، فقط شما کافیه چند تا چیز رو به تابع تعریف شده در این کامپوننت معرفی کنید،
سرور
یوزر
پسورد
دیتابیس
همین کافیه، بقیه رو خودش انجام میده!!:تشویق:

araz_pashazadeh
چهارشنبه 05 آبان 1389, 19:36 عصر
فرقی نمیکنه دوست عزیز، فقط شما کافیه چند تا چیز رو به تابع تعریف شده در این کامپوننت معرفی کنید،
سرور
یوزر
پسورد
دیتابیس
همین کافیه، بقیه رو خودش انجام میده!!:تشویق:
دوست عزیز اگر منظور شما دستور backupdatabase هستش این دستور فقط در SQL Server کار می کنه و زمانی که در SQLEXPRESS اجراش میکنم خطای زیر را می دهد.
من تکه کدی می خوام که در SQLEXPRESS کار کنه نه در SQL Server ممنون می شم اگه من را یاری کنید:ناراحت:

mustafa13
دوشنبه 22 آذر 1389, 21:03 عصر
سلام
دوستان اگه sql ما express باشه چه بايد كرد كسي نمي خواهد در اين مورد يه مثال كاملي ضميمه كنه با تشكر

hossin.esm
دوشنبه 22 آذر 1389, 23:16 عصر
این هم یک مثال برای کانکشن های با AttachDbFilename

mustafa13
دوشنبه 29 آذر 1389, 21:54 عصر
سلام
ضمن تشکر دوست عزیز restor اش کار نکرد

hossin.esm
دوشنبه 29 آذر 1389, 22:26 عصر
من این کد را تست کردم . و مشکلی هم ندارد.

esi_0o0
شنبه 28 اسفند 1389, 17:48 عصر
بهترین روش برای sql express 2000 از SQLDMO visual studio و برای sql express 2005,2008 از استفاده SMO visual studio کنید

araz_pashazadeh
یک شنبه 29 اسفند 1389, 09:39 صبح
با عرض سلام و خسته نباشید خدمت دوستان
باید خدمت دوستان بگم با این کدها و پرس جوهای که دوستان برای پشتیبا گیری از اسکیول اکسپرس قرار دادن نمیشه استفاده کرد چون این ها فقط در اسکیول سرور کار میکنن (البته ناگفته نماند دوست عزیزمون esi_0o0 کدی قرار دادن که اون درست کار میکنه). برای این کار شما باید از SMO استفاده کنید که کلی امکانات در اختیار شما قرار می ده.
حتی اسکیول اکسپرس خودشم برای کار با پایگاه از این کلاس استفاده می کنه من قبلا در این مورد تاپیک ایجاد کردم و یک برنامه کامل که همه کارهای کار با پایگاه را پوشش می ده قرار دادم میتونین از اون برنامه استفاده کنین برنامه قبلا تست شده کامل کار میکنه و هیچ مشکلی هم نداره.

mohsen.nsb44
یک شنبه 29 اسفند 1389, 11:16 صبح
برای این کار ابتدا باید از منوی Project گزینه Add Reference رو انتخاب کنی و از برگه Com گزینه Microsoft SQLDMO Object Library رو انتخاب و OK کنی.

برای BackUP باد کد زیر رو وارد کنی :
در قسمت بارگذاری فضاهای نامی قسمت زیر رو وارد کن


using SQLDMO;
using system.Reflection


کد زیر رو در سطر Puplic nameproject class form1:form وارد کن


private Database2 database;
private SQLServer2Class server;
private Backup2 backup;


بعد کد زیر رو مثلا برای رویداد Button بنویس تا BackUp گرفته شود


;()this.server=new SQLServer2Class
;()this.backup=new Backup2Class
;this.server.LoginSecure=true
;(this.server.connect("(local)",Missing.Value,Missing.Value
;(database=(Database2)server.Databases.Item("dbName",Misiing.Value
;backup.database=database.Name
"backup.Files=@"path file .bak
;(backup.SQLBackup(server
;()server.disConnect
;backup=null
;server=null


حواستون باشه در قسمت


"backup.Files=@"path file .bak


مسیر فایل بانک اطلاعاتی رو با پسوند bak وارد نمایید
دوست عزیز کارایی که گفتید رو انجام دادم اما ارور زیرو داد

[Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server does not exist or access denied.
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()).

کد استفاده شده


this.server=new SQLServer2Class();
this.backup=new Backup2Class();

this.server.LoginSecure=true;

this.server.Connect("(local)",Missing.Value,Missing.Value);

database =(Database2)server.Databases.Item("DbProject",Missing.Value);

backup.Database=database.Name;

backup.Files=@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Documents and Settings\Mohsen\My Documents\Visual Studio 2008\Projects\project\project\DbProject.bak";

backup.SQLBackup(server);

server.DisConnect();
backup=null;
server = null;