0 امتیاز
سلام

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

تا اینجای کار مشکلی نیست اما کاری که من میخوام انجام بشه اینه که وقتی برنامه رو روی سیستم های کلاینت ها نصب کردم ، برنامه امکان این رو داشته باشه که با زدن یک دکمه ی بروزرسانی توسط کاربر ، فایل دیتابیس من رو از سیستم ادمین برداره و جایگزین فایل فعلی کاربر کنه

1 پاسخ

0 امتیاز

 

سلام 

موضوع کار شما در ساده ترین حالت ممکن دو حالت داره

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

مثال 

برای سیستم اصلی یه ای پی ثابت تعریف کنی از نوع محلی و توی پوشه ای اونو به اشتراک گذاشته و همه دسترسی ها رو تیک بزنید
private static string conected2 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\192.168.135.1\newfolder\database.accdb"

راه دوم میبایست دیتابیس رو توی یه سرور اپلود کنی 

ابتدا باید کاربر شما از دیتابیسش یه بک اپ بگیره

BACKUP DATABASE DatabaseName
TO DISK = 'path\DatabaseName_Backup.bak'
WITH FORMAT, COPY_ONLY


//سپس دیتابیس شما که توی سرور هستش رو جایگزین کنه
یعنی ادرس رور رو توی باتن کاربر قرار بدی یا با متغییری توی تکست باکس جایگیزین کنی 

public void BackupDatabase(SqlConnectionStringBuilder csb, string destinationPath)
{
    ServerConnection connection = new ServerConnection(csb.DataSource, csb.UserID, csb.Password);
    Server sqlServer = new Server(connection);

    Backup bkpDatabase = new Backup();
    bkpDatabase.Action = BackupActionType.Database;
    bkpDatabase.Database = csb.InitialCatalog;
    BackupDeviceItem bkpDevice = new BackupDeviceItem(destinationPath, DeviceType.File);
    bkpDatabase.Devices.Add(bkpDevice);
    bkpDatabase.SqlBackup(sqlServer);
    connection.Disconnect();

}

اینم یه سمپل

https://www.codeproject.com/KB/database/994806/SqlDbClonerSource.zip

 

 

در مرحله بعدی دیتابیسی که از سرور ازش بک اپ گرفتهشده  رو ری استور کنه
public void RestoreDatabase(String databaseName, String backUpFile, String serverName, String userName, String password)
{
    ServerConnection connection = new ServerConnection(serverName, userName, password);
    Server sqlServer = new Server(connection);
    Restore rstDatabase = new Restore();
    rstDatabase.Action = RestoreActionType.Database;
    rstDatabase.Database = databaseName;
    BackupDeviceItem bkpDevice = new BackupDeviceItem(backUpFile, DeviceType.File);
    rstDatabase.Devices.Add(bkpDevice);
    rstDatabase.ReplaceDatabase = true;
    rstDatabase.SqlRestore(sqlServer);
}

 

سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,919 کاربر

دسته بندی ها

...