PDA

View Full Version : جابجایی محتویات دوجدول



Sub Zero
دوشنبه 19 فروردین 1387, 13:34 عصر
سلام به همه دوستان .
در دیتا بیس به برنامه ام یک جدول مربوط به اطلاعات کاربران وجود . مواقعی که میخوام دیتابیس رو Restore کنم با مشکلی بر میخورم که هر کاری می کنم رفع نمیشه .
مشکل اینه که نمی خوام اطلاعات مربوط به جدول کاربران بعد از انجام عمل Restore تغییر کنه.

برای این کار اعمال زیر رو به ترتیب انجام دادم اما جواب نگرفتم .
1- ذخیره اطلاعات جدول کاربران درون یک دیتاست

2- Restore کردن دیتابیس

3-حذف داده های موجود در جدول اطلاعات کاربران و Update کردن جدول با دیتاست ذخیره شده .

البته تمامی این مراحل را با در نظر گرفتن اینکه Ado.Net به صورت Connection Less عمل می کنه
انجام دادم . تا اونجایی که من از دیتاست شناخت دارم ، روش کارش به این صورته که اطلاعات رو از یه واسط (مثلا DataAdapter ) گرفته و مانند یه ظرف داده های دریافت شده را نگه میداره و هر تغییری هم که روی این داده ها انجام بشه روی داده های اصلی دیتابیس اثری نداره . عکس این عمل هم باید صادق باشه . یعنی اگه تغییری در دیتا بیس صورت بگیره تا زمانی که مجددا دیتاست پر نشه (Fill) تغییری در داده های دیتاست صورت نمی گیره .

اما با انجام دادن سه مرحله گفته شده ظاهرا این اتفاق نیافتاد. بعد از Restore کردن و حذف داده های جدول کاربران علیرغم اینکه برنامه محتویات دیتاست ذخیره شده رو پر نشون میده اما آپدیت انجام نمیشه نمیدونم اشکال کار کجاست.
کدهای مرحله 3و1 رو میزارم تا اگه دوستان نظری دارند اعلام کنند. :

مرحله اول :


Shared SavedTable As New DataTable
Shared Sub SaveUserInfo()
Dim MasterTable As New DBSetTableAdapters.UsersTbl
Dim Dbset As New DBSet
MasterTable.Fill(Dbset.Users)
SavedTable = Dbset.Users.Copy
End Sub

مرحله دوم : Restore DataBase

مرحله سوم :

Shared Sub RetriveUserInfo()
Dim Rows As DataRowCollection
Rows = SavedTable.Rows

Using con As New SqlConnection(My.Settings.DBConnection)
con.Open()
Dim sqlcmd As New SqlCommand("Delete From Users ", con)
sqlcmd.ExecuteNonQuery()
End Using
Dim MasterTable As New DBSetTableAdapters.UsersTbl

For Each row As DataRow In Rows
MasterTable.Update(row)
Next

End Sub

Dariuosh
دوشنبه 19 فروردین 1387, 14:20 عصر
مشکل اینه که نمی خوام اطلاعات مربوط به جدول کاربران بعد از انجام عمل Restore تغییر کنه.

آخه چرا باید تغییر کنه !!؟ :متفکر:

در هر صورت اینجوری هم امتحان کن

Private DtUser AsNew DataTable
Private Cnt AsNew SqlConnection
Private Cmd AsNew SqlCommand
Private Da AsNew SqlDataAdapter
PrivateSub SaveUserInfo()
With Cnt
.ConnectionString = "..............."
.Open()
EndWith
With Cmd
.Connection = Cnt
.CommandText = "Select * From Users "
.CommandType = CommandType.Text
EndWith
With Da
.SelectCommand = Cmd
.Fill(DtUser)
.FillSchema(DtUser, SchemaType.Mapped)
EndWith
EndSub

بعد از ریستور

PrivateSub RetriveUserInfo()
With Cmd
.Connection = Cnt
.CommandText = "Delete From Users "
.CommandType = CommandType.Text
.ExecuteNonQuery()
EndWith
ForEach Row As DataRow In DtUser.Rows
Cmd.CommandText = "Insert Into Users .........(Itemhaye Row)......."
Cmd.ExecuteNonQuery()
Next
EndSub

Sub Zero
دوشنبه 19 فروردین 1387, 16:04 عصر
آخه چرا باید تغییر کنه !!؟
دوست عزیز بعد از انجام Restore محتویات جدول به زمانی بر میگرده که ازش Backup گرفته شده .

Dariuosh
دوشنبه 19 فروردین 1387, 16:14 عصر
آهان اون که امره طبیعیه -من درست متوجه توضیحات شما نشده بودم
حالا مشکلتون حل شد ؟

Sub Zero
چهارشنبه 21 فروردین 1387, 15:13 عصر
کدهای من از لحاظ Syntax مشکلی نداشت (من از Typed DataSet استفاده کردم). مشکلم با جایگزینی متد Insert به جای Update حل شد . اما هنوز نفهمیدم اشکال کار کجاست .
قاعدتا باید با Update هم جواب میداد !
با تشکر از شما دوست عزیز .