الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحديث قواعد البيانات باستخدام AcceptChanges() في ADO.NET

مغلق
بدأه BlueMan في 7 أغسطس 2006 · 3 رد · 791 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مشكلتي : عندما أضيف سطر بيانات جديد row فإنه يضاف إلى مجموعة DataSet (بالذاكرة) و لكن عندما أطلب الأمر Update لحفظ البيانات فيزيائيا على ملف قاعدة البيانات تظهر رسالة الخطأ :

Update requires a valid InsertCommand when passed DataRow collection with new rows.

و هذا هو البرنامج : <_<

Dim objDs As DataSet

Dim ObjDa As OleDbDataAdapter

Dim objRow As DataRow

Dim objTable As DataTable

Dim objColumn As DataColumn

Dim sSQL As String = ""

Dim xData as String = ""

Try

objDs = New DataSet()

sSQL = "SELECT * FROM " & TableName

If SQL_Condition <> "" Then sSQL &= " Where " & SQL_Condition

If SpecialOrder <> "" Then sSQL &= " ORDER BY " & SpecialOrder

'Connect to database and specify sSQL

ObjDa = New OleDbDataAdapter(sSQL, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\1.mdb" )

' Get Data ...

ObjDa.Fill(objDs, TableName)

Dim xRow As DataRow

xRow = objDs.Tables(0).NewRow

With xRow

.Item(1) = 1

.Item(2) = "Serious Error dd !"

.Item(3) = Now.ToShortTimeString.ToString

.Item(4) = Now.ToShortDateString.ToString

End With

objDs.Tables(0).Rows.Add(xRow)

ObjDa.Update(objDs, "Errors") ' Here Is the Problem !!!

objDs.Tables("Errors").AcceptChanges()

For Each objRow In objDs.Tables(0).Rows

xData &= objRow("ErrText").ToString & vbCrLf

Next

MsgBox ( xData )

Catch ex As Exception

MsgBox(ex.Message, MsgBoxStyle.Critical)

Me.Dispose()

Return False

End Try

تم تعديل هذه المشاركة بواسطة BlueMan في 7 أغسطس 2006 في 18:06

#2

أنت تحتاج الى InsertCommand بالفعل !!

اما عن طريق الوسيطات او CommandBuilder

عن كيفية عمل كوماند فاقرا الجزء الخاص بADO.NET فى كتاب تركى العسيرى و فيه شرح وافى لهذا الموضوع !!

انا لا املك لينك للكتاب و لكن ابحث فى المنتدى و ستجده بالتأكيد

AlexCard.gif

Business Card

Ahmad Fathy Ahmad

Computer and Systems Department

Faculty of Engineering, Alexandria University

Cellular: +2 010 1461154

E-mail: midoalx@hotmail.com

ICQ: 148481391

#3

الأخ AHMAD FATHY ..

أشكرك على ردك السريع على مشكلتي ... فقد قمت بتحميل الكتاب الذي أشرت إليه و عملت بمضمونه خطوة بخطوة لكن مازلت أتلقى رسالة الخطأ :( التالية :

Syntax error in INSERT INTO statement

و هذا هو البرنامج :unsure:

ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\1.mdb"

sSQL = "SELECT * FROM Errors" ' The Table Name is 'Errors'

'Connect to database ...

Dim ObjConn As New OleDbConnection(ConnStr)

ObjConn.Open()

'Creat Data Adapter ...

Dim objDA As New OleDbDataAdapter(sSQL, ObjConn)

' Creat Data Set ...

Dim ObjDS As New DataSet

objDA.Fill(ObjDS, "Errors")

' Add New Row ...

Dim xRow As DataRow

xRow = ObjDS.Tables(0).NewRow

With xRow

.Item(1) = 1

.Item(2) = "Serious New Error !"

.Item(3) = Now.ToShortTimeString.ToString

.Item(4) = Now.ToShortDateString.ToString

End With

ObjDS.Tables(0).Rows.Add(xRow)

'Update Data ( Creat CommandBuilder ) ...

Dim objCMD As New OleDbCommandBuilder(objDA)

objDA.UpdateCommand = objCMD.GetUpdateCommand

objDA.DeleteCommand = objCMD.GetDeleteCommand

objDA.InsertCommand = objCMD.GetInsertCommand

objDA.Update(ObjDS, "Errors") ' This line generat Error !

' Close the Connection ...

ObjConn.Close()

#4

أخي الفاضل

أولا : مافائدة أن تنشأ CommandBuilder بعد تكوين DataSet فهو يجب أن ينشأ قبل تكوينها .

ثانيا : لا داعي لانشاء InsertCommand, UpdateCommand, and DeleteCommand properties

لأن CommandBuilder dr يقوم بانشائها تلقائيا

هذا الموضوع مغلق.

مواضيع مشابهة