PDA

View Full Version : چگونگی کار دستور Update موجود در Data Adapter



روح اله معینی زاده
سه شنبه 24 آذر 1383, 08:17 صبح
با سلام خدمت دوستان گرامی

دستور Update موجود در Data Adapter به چه شکل عمل می کند؟

توضیح: ::نوشتن::
من یک Data Grid دارم که به بانک وصل شده است. حال وقتی مقدار یکی از این ستون‌ها را تغییر می دهم و کلید به روز رسانی را می زنم این عمل انجام نمی شود و خطای شماره 5 با توضیح خطای
ERROR [hy090] [Microsoft][ODBC Microsoft Access Driver]Invalid string or buffer length را می دهد. دستور به روز رسانی من هم یه چیزی شبیه دستور زیر است
UPDATE Homes SET User_ID = ?, First_Name = ?, Last_Name = ?, Address = ?
کد مربوط به روال به روز رسانی نیز به شکل زیر است:
With DA_List_Homes.UpdateCommand
.Parameters("User_Id").Value = user_id.Trim
.Parameters("First_Name").Value = Trim(DG_List_Tels.Item(DG_List_Tels.CurrentCell.Ro wNumber, 0))
.Parameters("Last_Name").Value = Trim(DG_List_Tels.Item(DG_List_Tels.CurrentCell.Ro wNumber, 1))
.Parameters("Address").Value = Trim(DG_List_Tels.Item(DG_List_Tels.CurrentCell.Ro wNumber, 2))
End With
Try
DA_List_Homes.Update(DS_Main, "Homes")
Catch ex As Exception
MsgBox(Err.Number & vbCrLf & Err.Description)
End Try
خوب با توجه به توضیحات بالا، فکر می کنید اشکال در کجایه؟

با احترام- خدانگهدار

kochol
جمعه 27 آذر 1383, 11:30 صبح
را می دهد. دستور به روز رسانی من هم یه چیزی شبیه دستور زیر است
UPDATE Homes SET User_ID = ?, First_Name = ?, Last_Name = ?, Address = ?

[code]UPDATE Homes SET User_ID = ?, First_Name = ?, Last_Name = ?, Address = ? where (user_id=?)

hamedj2001
چهارشنبه 07 اردیبهشت 1384, 13:11 عصر
سلام خسته نباشید

من هم مشکل شما رو در رابطه با دستور update در dataadapter دارم لطفا اگه میشه منم راهنمایی کنین

مرسی

یاشار
پنج شنبه 08 اردیبهشت 1384, 02:54 صبح
اگر از جدول‌های مرتبط به هم توی دیتاست استفاده نمی‌کنید، بهتره که کد Update آداپتور رو تغییر ندید و اجازه بدید ویژوال استودیو کد پیش‌فرض خودش رو استفاده کنه.

تغییراتی رو که میخواهید بوسیله کد انجام بدید، روی دیتاست انجام بدید، نه روی اون چیزی که دیتاگرید نشون میده. بعد که تمام تغییرات انجام شد و خواستید تغییرات انجام شده، در دیتابیس لحاظ بشه، دیتابیس رو (بوسیله آداپتور) به روز کنید.




Dataset1.Tables("tblHomes").Rows(12).Item("colStreet") = "Valiasr"
Dataset1.Tables("tblHomes").Rows(12).Item("colNo") = "18"
.
.
.

'All the changes are made to the dataset
'and you want to exert it on the DataBase
'probably when the user clicks "Save" or
'wants to leave the application

Try
'always use update and fill methods in a try
'block, since the DB might not be accessible
'at the moment
DA_House.Update(Dataset1)
Catch ex As Exception

End Try




اگر میخواهید چندین تغییر رو پشت سر هم (مثلا تو یه حلقه) انجام بدین اول انقیاد رو معلق کنید، بعد که حلقه تموم شد دوباره برقرارش کنید.





Me.BindingContext(Dataset1, "Bound_Table_Name").SuspendBinding()

For I As Int32 = 0 To N
...
...
Next

Me.BindingContext(Dataset1, "Bound_Table_Name").ResumeBinding()




وقی که شما کنترلی رو (مثل دیتاگرید ) به دیتاست Bind (مقید) می‌کنید، کنترل شما اطلاعاتی رو نشون میده که آخرین بار از دیتابیس گرفته شده. هر تغییری که تا Fill بعدی توسط کاربران دیگه انجام بشه از شما مخفی میمونه. توجه داشته باشید که کنترل شما به دیتاست Bind شده ، نه به دیتابیس.

وقتی متد Adaper.Apdate استفاده می‌شه، آداپتور به صورت خودکار دوباره دیتاست رو به همراه آخرین تغییرات Fill می‌کنه ( تغییرات ممکنه بوسیله شما انجام شده باشه یا کاربران دیگه ) و احتیاجی نیست که بعدش متد Adapter.Fill رو اجرا کنید.


مدل دسترسی اطلاعات به صورت گسسته : Disconnected data access model

این روشیه که مایکروسافت توصیه میکنه و ADO.NET برای دسترسی به اطلاعات استفاده میکنه. یعنی استفاده از دیتاست و آداپتور. به طور خلاصه یه سری اطلاعات از دیتابیس جمع آوری میشه (تو دیتاست) و ارتباط با دیتابیس قطع میشه. کاربر همه تغییراتی که میخواد رو روی اطلاعات انجام میده. بعد از اینکه کارش تموم شد، "فقط تغییرات" ی که در دیتاست اتفاق افتاده به دیتابیس گزارش میشه.

تغییرات از سه حالت خارج نیستند:
یه سری ردیف اضافه شده.
یه سری ردیف حذف شده.
مقدار چند تا از ردیف‌های موجود عوض شده.

برای همین هر DataAdapter سه تا خاصیت یا Property داره :

DeleteCommand
InsertCommand
UpdateCommand

وقتی شما مینویسید :


DA_Adapter.Update(DataSet1)

این سه دستور پشت سر هم اجرا میشن.( UpdateCommand رو با متد Update آداپتور اشتباه نگیرید.)

ضمنا خیلی چیزهای دیگه هم چک می‌شه. اگر تسلط کامل روی ADO.NET ندارید نباید به CommandString این دستورها دست بزنید. تنها دلیلی که برای تغییر این دستورها می‌تونه وجود داشته باشه اینه که بیشتر از یک جدول از دیتابیس در دیتاست ریختید و این جدول‌ها در دیتابیس به هم مربوطند و ترتیب انجام این سه دستور اهمیت داره. ADO.NET یکی از کلاس‌های اساسی Frameword محسوب میشه که هر کسی به هر زبونی برنامه مینویسه باید در سطح قابل قبولی بهش مسلط باشه.

این روش برای وب ایدآله ولی در موارد دیگه ممکنه کارساز نباشه (مثل سیستم رزرو بلیط هواپیمایی که همه باید همیشه از آخرین تغییرات مطلع باشن ).

انشااله یه کسی هم پیدا بشه یه ادیتور فارسی حسابی‌تر برای این PhpBB بنویسه. پدرم دراومد چهار خط نوشتم.