نمایش نتایج 1 تا 12 از 12

نام تاپیک: مشکل با restore کردن

  1. #1

    مشکل با restore کردن

    سلام دوستان
    من یه برنامه ای با C#‎ و sql 2000 نوشتم من از بانکم Backup می گیرم و هیچ مشکلی هم نداره این هم کدش:
    private void button1_Click(object sender, EventArgs e)
    {
    string strFileName = string.Empty;
    saveFileDialog1.DefaultExt = "BAK";
    saveFileDialog1.FileName = "BackFile";
    saveFileDialog1.Filter = @"SQL Backup Files (*.BAK) |*.BAK | All Files (*.*) |*.*";
    saveFileDialog1.FilterIndex = 1;
    saveFileDialog1.OverwritePrompt = true;
    saveFileDialog1.Title = "Backup SQL File";
    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {
    strFileName = saveFileDialog1.FileName;
    back(strFileName);
    }
    }

    private void back(string strFileName)
    {
    try
    {
    string command = @"BACKUP DATABASE parsian TO DISK='" + strFileName + "'";
    this.Cursor = Cursors.WaitCursor;
    SqlCommand oCommand = null;
    SqlConnection oConnection = null;
    oConnection = new SqlConnection("Data Source=Computer1; initial catalog=parsian ;integrated security=true;");
    if (oConnection.State != ConnectionState.Open)
    oConnection.Open();
    oCommand = new SqlCommand(command,oConnection);
    oCommand.ExecuteNonQuery();
    this.Cursor = Cursors.Default;
    MessageBox.Show("پشتيباني با موفقيت انجام شد");
    }
    catch (Exception ex)
    {
    MessageBox.Show("ERROR Occurd: " + ex.Message);
    }
    }



    ام مشکل من در restore کردن آن می باشد یعنی برای بار اول که می خوام restore کنم این پیغام (پیوست کردم) را می دهد و بار بعدی یه پیغام دیگه و بار سوم می نویسه که کاربری از این بانک در حال استفاده می باشد و واردsql2000 هم می شود جلوی بانک مربوطه نوشته
    (single user) این هم کد restore
    private void button1_Click(object sender, EventArgs e)
    {
    string strFileName = string.Empty;
    openFileDialog1.FileName = " ";
    openFileDialog1.Filter = @"SQL Backup Files (*.BAK) |*.BAK | All Files (*.*) |*.*";
    openFileDialog1.FilterIndex = 1;
    openFileDialog1.Title = "Restor SQL File";
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    strFileName = saveFileDialog1.FileName;
    rest(strFileName);
    }
    }
    private void rest(string strFileName)
    {
    try
    {
    string command = "ALTER DATABASE parsian SET SINGLE_USER with ROLLBACK IMMEDIATE " +
    "use master " +
    " RESTORE DATABASE parsian FROM DISK='" + strFileName + "'";
    this.Cursor = Cursors.WaitCursor;
    SqlCommand oCommand = null;
    SqlConnection oConnection = null;
    oConnection = new SqlConnection("Data Source=Computer1; initial catalog=parsian ;integrated security=true;");
    if (oConnection.State != ConnectionState.Open)
    oConnection.Open();
    oCommand = new SqlCommand(command, oConnection);
    oCommand.ExecuteNonQuery();
    this.Cursor = Cursors.Default;
    MessageBox.Show("پشتيباني با موفقيت انجام شد");
    }
    catch (Exception ex)
    {
    MessageBox.Show("ERROR Occurd: " + ex.Message);
    }
    }


    لینک تصویر error

    با تشکر

  2. #2

    نقل قول: مشکل با restore کردن

    احتما دارد که شما قبل از restoreکردن connection را در جایی باز کرده باشید وآن را close نکرده باشید؟ به نظر می آیید که شما باید حتما همه connection ها را باید ببندید

  3. #3
    کاربر دائمی آواتار esmaeily-hosein
    تاریخ عضویت
    مهر 1385
    محل زندگی
    شهر دودها
    پست
    227

    نقل قول: مشکل با restore کردن

    در sql به خصوص در سیستم های شبکه ای اگر اتصالی برقرار باشد این اجازه را به شما نمیدهد .برای این کار شما میتوانید با sp_who لیست افراد متصل به sql خود را ببینید و اگر خواستید به force connection کنید .

  4. #4

    نقل قول: مشکل با restore کردن

    دوست عزیز تمام connection را close کردم باز هم همون error را می ده

    دوست عزیز این برنامه من تحت شبکه نیست فقط روی یک pc می خواهد کار کند

  5. #5
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    آستارا-تهران
    پست
    357

    نقل قول: مشکل با restore کردن

    دوست عزیز به برنامه ای که در این پست گذاشته ام مراجعه کن
    https://barnamenevis.org/showthread.php?t=153480

  6. #6

    نقل قول: مشکل با restore کردن

    دوست عزیز این برنامه قبلا دیدم برنامه قشنگی ولی فکر کنم مثل این برنامه در CodeProject یا msdn دیده بودم ولی من می خواهم همون مشکل خودم حل بشه

    با تشکر

  7. #7
    کاربر دائمی آواتار esmaeily-hosein
    تاریخ عضویت
    مهر 1385
    محل زندگی
    شهر دودها
    پست
    227

    نقل قول: مشکل با restore کردن

    عزیزم همونطور که گفتم sp_who رو اجرا کن ، از لیست به دست اومده با دستور kill تک تک spid را ببند .
    در ضمن کسی اینجا موظف به پاسخ دادن نیست .

  8. #8

    نقل قول: مشکل با restore کردن

    دوست عزیز میشه یه کم بیشتر توضیح بدی یا کدی در این مورد بذاری

  9. #9
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    آستارا-تهران
    پست
    357

    نقل قول: مشکل با restore کردن

    دوست عزیز این برنامه قبلا دیدم برنامه قشنگی ولی فکر کنم مثل این برنامه در CodeProject یا msdn دیده بودم
    من خودم قبل از اینکه این برنامه رو بنویسم کلی اینترنت رو گشتم ولی تمام برنامه هایی که پیدا کردم اشکالاتی داشتند بنابراین مجبور شدم خودم یه چیز کامل بنویسم.
    90% برنامه های اینترنتی هنگام Restore اگه مسیر جدید با مسیر قبلی پایگاه داده متفاوت بود با مشکل مواجه می شدند همچنین اگر از قبل پایگاه داده موجود نبود عمل رستور با شکست همراه می شد. برنامه ای که من نوشتم می تونه یک پایگاه داده خالی رو در مسیر دلخواه ایجاد کنه و بعد عمل رستور را انجام بده و علاوه براین می تونه فایل های سرایند فایل بکاپ رو بخونه و اون رو در مسیر دلخواه رستور کنه.
    ممکنه یکی از این موارد مشکل برنامه شما باشه.
    ولی من می خواهم همون مشکل خودم حل بشه
    تا وقتی تکنولوژی جدید و با قدرتی مثل smo هست چرا اصرار به کدنویسی اونم از این نوع.
    هرچند کد نویسی خوبه ولی بهتره از کلاس های کپسوله شده استفاده بشه به شرطی که سر از کار کلاس درآریم.

  10. #10
    کاربر دائمی آواتار esmaeily-hosein
    تاریخ عضویت
    مهر 1385
    محل زندگی
    شهر دودها
    پست
    227

    نقل قول: مشکل با restore کردن

    من با smo هم تست کردم همین مشکل اونجا هم هست .اصلا خود sql هم همین کارو فکر میکنم چون همه رو بیرون میکنه .دست خط جفتشم برا خودمه کپی جایی نیست !
    نمونه کد با C#‎

    DataTable dt = new DataTable();
    using (SqlConnection connection = new SqlConnection("User ID=sa;pwd=11;Initial Catalog=tempdb;Data Source=tfidb2"))
    {
    using (SqlCommand command = new SqlCommand("SP_Who", connection))
    {
    connection.Open();

    dt.Load(command.ExecuteReader());

    string stCommand = "KILL {0}";
    foreach (DataRow dr in dt.Rows)
    {
    command.CommandText = string.Format(stCommand, (Int16)dr["spid"]);
    try
    {
    command.ExecuteNonQuery();
    }
    catch (SqlException) { }
    }
    }
    }
    //Write Restore Commmand

    سمت sql
    --Members
    DECLARE @iCounter int,@iLen int,@spId int
    DECLARE @stCommand varchar(50)

    DECLARE @sp_who Table(
    spid smallint,
    ecid smallint,
    status nchar(30),
    loginame nchar(128),
    hostname nchar(128),
    blk char(5),
    dbname nchar(128),
    cmd nchar(16),
    request_id smallint,
    Id int identity(1,1))

    --Initialzing
    INSERT INTO @sp_who EXEC sp_who

    SET @iCounter=1;
    SELECT @iLen=COUNT(Id) FROM @sp_who

    --Body
    WHILE (@iCounter<=@iLen)
    BEGIN
    BEGIN TRY
    SET @spId=(SELECT spid FROM @sp_who WHERE ID=@iCounter)
    SET @stCommand='KILL QUERY NOTIFICATION SUBSCRIPTION ' + CAST(@spId as varchar(5))

    EXECUTE @stCommand
    END TRY
    BEGIN CATCH
    END CATCH
    SET @iCounter=@iCounter+1
    END


  11. #11
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    آستارا-تهران
    پست
    357

    نقل قول: مشکل با restore کردن

    فکر کنم تو روشی که شما نوشتی نام فایل باید همنام پایگاه داده قبلی باشد یا شاید هم در مسیرهای خاص مانند desktop عمل Restore را انجام میدی که منجر به خطا میشه.
    آیا اون برنامه ای که من با smo نوشته بودم رو تست کردی؟
    اگه ارور میده ارورش چیه؟

  12. #12
    کاربر دائمی آواتار esmaeily-hosein
    تاریخ عضویت
    مهر 1385
    محل زندگی
    شهر دودها
    پست
    227

    نقل قول: مشکل با restore کردن

    فرق میکنه چه خطایی میده ! معمولا خطا به دلیل database در حال استفاده میباشد هست .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •