PDA

View Full Version : TableAdaper نمی تواند ذخیره کند؟



منصور بزرگمهر
شنبه 17 مرداد 1388, 22:44 عصر
من یک TableAdaper تعریف کرده ام و با ان یک DataSet را پر کرده ام، و از دیتا ست یک DataView گرفته ام و از ان بعنوان مقید کردن اشیای خودم در فرم استفاده کرده ام،


Me.objDataAdapter.Update(Me.objDataSet.Tables("Student")

حال وقتی در فرم چیزی را تغییر می دهم و می خواهم آن را UpDate کنم(در TableAdaper)، پیام زیر را نشان می دهد

mn_zandy63
یک شنبه 18 مرداد 1388, 01:37 صبح
علت همونه که نوشته شده٬ وقتی dataadapter شما ساخته میشده دستور select ش رو اتوماتیک نوشته برات ولی دستور update ش رو خیر. علتش هم مثلا میتونه این باشه که شما چند تا جدول رو به هم join کردی در select ت.

منصور بزرگمهر
یک شنبه 18 مرداد 1388, 06:32 صبح
با سلام خدمت دوست عزیز
ابتدا که یک جدول بیشتر نیست. ولی خودم یک حدسهایی می زنم. در TableAdapter باید یک SQL مورد UpDate با متغیرهای لازم بنویسم، آن وقت متغیر ها را با Source Column تطبیق بدهم سپس کار خواهد کرد. البته این در کومپننت TableAdaper کار می کند، و در متغیر سطح کد ان نمی دانم. سعی می کنم این راه را امتحان کنم، نتیجه را اعلام می کنم.

منصور بزرگمهر
یک شنبه 18 مرداد 1388, 07:13 صبح
ولی نه ابتدا که نقل قول از شما که فقط برای Select استرینگ دارد و نه برای آپدیت، و زمانی که می خواهم استرینگی برای آپدیت آن بنویسم پیام اصلاً متغیر شما ایجاد نشده است، نشان می دهد (شکل شماره یک) متن استرینگ آپدیت اینجاست:


Me.objDataAdapter.UpdateCommand.CommandText = "UPDATE tbl_Student sET Student_Number, Last_Name, First_Name, Date_Birth_Day,Father_Name, Address , Telephone, Picture "چکار باید بکنم

mn_zandy63
سه شنبه 20 مرداد 1388, 01:21 صبح
بله درسته به این علت که اصلا آبجکت command برای update command ایجاد نشده٬ شما باید خودت ایجادش کنی.
یعنی updateCommand ت رو new کن و بعد commandText رو مقدار بده.

Sociant
سه شنبه 20 مرداد 1388, 07:24 صبح
دلیل این مشکل اینه که جدولتون کلید اصلی نداشته. کلید اصلی جدول رو چک کنید

majid325
چهارشنبه 21 مرداد 1388, 02:21 صبح
دلیل این مشکل اینه که جدولتون کلید اصلی نداشته. کلید اصلی جدول رو چک کنید

تعریف کردن کلید اصلی باعث میشه که designer بتونه تشخیص بده command های مربوط به تغییرات رو و اونها رو ایجاد کنه.

منصور بزرگمهر
چهارشنبه 21 مرداد 1388, 02:28 صبح
اول چیزی که اشتباه کردم DataAdapter است و نه TableAdapter

مورد بعدی شی SqlCommand را ایجاد کردم و استرینگ آپدیت و کانکشن لازم را بدان دادم. و در DataAdapter مورد UpdateCommand با اصل شی SqlCommand ایجاد کردم و حال شی فوق را آپدیت کردم، و هیچ پیام دیگر نداد، ولی ذخیره نمی کند




Me.objConnection.Open()

Dim objCommand As New SqlCommand("UPDATE tbl_Student SET Student_Number = '" & Me.txt_Student_Number.Text & _
"',Last_Name = '" & Me.txt_Last_Name.Text & "', First_Name = '" & Me.txt_First_Name.Text & _
"',Date_Birth_Day = '" & Me.txt_Date_Birthe_Day.Text & "',Father_Name = '" & Me.txt_Father_Name.Text & _
"', Address = '" & Me.txt_Address.Text & "', Telephone = '" & Me.txt_Telephone.Text & _
"' Where (Id_Student = " & Me.BindingContext(Me.objDataView, "Id_Student").Current & ")", Me.objConnection)
'

objCommand.CommandType = CommandType.Text


Me.objDataAdapter.UpdateCommand = objCommand




Me.objDataAdapter.Update(Me.objDataSet.Tables("Student"))



Me.objConnection.Close()




کد بالا ذخیره نمی کند دلیل چیست؟

majid325
چهارشنبه 21 مرداد 1388, 05:35 صبح
یه بار قبل خط :

Me.objDataAdapter.Update(Me.objDataSet.Tables("Student"))

این خط رو اضافه کن :

objDataSet.AcceptChanges()

منصور بزرگمهر
پنج شنبه 22 مرداد 1388, 00:37 صبح
جناب آقای majid325 کد فوق را نیز اضافه کردم، ولی ذخیره نکرد.

استرینگ آپدیت نیز درست است، در CommandText شی DataAdapter بیرون اوردم، و در SQL Server امتحان کردم، ذخیره کرد، ولی با کد عمل نمی کند.
من توضیحات شما را در تاپیک زیر دیدم و از ان استفاده کردم.


http://barnamenevis.org/forum/showthread.php?t=170796&page=3

فقط از طریق SQLCommand می توانیم ذخیره کنیم، و وقتی به MSDN نیز مراجعه می کنیم، هنگام آپدیت شی DataAdapter دوباره از طریق SQL Command توصیه می کند.

دلیل چیست؟

majid325
پنج شنبه 22 مرداد 1388, 02:36 صبح
استرینگ آپدیت نیز درست است، در CommandText شی DataAdapter بیرون اوردم، و در SQL Server امتحان کردم، ذخیره کرد، ولی با کد عمل نمی کند.
من توضیحات شما را در تاپیک زیر دیدم و از ان استفاده کردم.


errror میده ؟ مشکل چیه؟


فقط از طریق SQLCommand می توانیم ذخیره کنیم، و وقتی به MSDN نیز مراجعه می کنیم، هنگام آپدیت شی DataAdapter دوباره از طریق SQL Command توصیه می کند.
دلیل چیست؟
خوب در نهایت Adapter هم از command استفاده میکنه دیگه...

کمی تو نمونه کدهای سایت هم بگردید.
در کل روال صریح و ساده با این صورت هست:

در فرم Load:

ad.UpdateCommand = New SqlCommand("SQl Update")
زمان update:

ds.AcceptChanges()
ad.Update(ds)
سعی کنید در جدولتان همیشه فیلد pk باشد
از ذکر کارکتر '*' به جای ذکر اسامی تمام فیلد ها در کوئری هاتون پرهیز کنید
فیلد pk رو در کوئری هاتون حدالمقدور شرکت دهید