PDA

View Full Version : پیغام خطا در Update کردن database



naeeme
جمعه 01 دی 1385, 13:24 عصر
چند سوال درباره SQL server داشتم.
1) در این کد چه ایرادی وجود داره؟




Dim myRow As DataRow

myRow = dsDataSet.Tables(0).NewRow()
myRow("iduser") = intIDUser
myRow("date") = Date.Today.Date
myRow("action") = strMessage
dsDataSet.Tables(0).Rows.Add(myRow)
'**
Dim last As Integer = dsDataSet.Tables(0).Rows.Count
dsDataSet.Tables(0).GetChanges()
If dsDataSet.HasErrors Then
ErrorHandled()
Else
If Not (UpdateDataBase(strDataSourceConnection, dsDataSet, "logfile")) Then
MsgBox(" LogFile " & "خطا در به روزرسانی پایگاه داده", MsgBoxStyle.OKOnly)
End If
End If


وقتی برای بار دوم این کد اجرا میشه، dsDataSet.HasErrors=true میشه. این کد رو از روی کتاب database انتشارات WROX نوشتم. در اون کد یه دستور Movelast() ( در محلی که * گذاشتم)وجود داشت که مشخص نبود مرجعش کجا ست.

2)در این تکه کد که برای Update شدن Databse اصلی هست، این خطا رو می گیره.( در دستور myDataAdapter.Update(dsChangedRows, strTable) این خطا رو میگیره)


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

دلیلش چی هست؟




Public Function UpdateDataBase(ByVal strConnection As String, ByVal _
dsDataSet As DataSet, ByVal strTable As String) As Boolean
Dim dsDataSetChanges As DataSet
dsDataSetChanges = dsDataSet.GetChanges
If (Not (dsDataSetChanges) Is Nothing) Then
Try
UpdateDataSource(dsDataSetChanges, strTable)
dsDataSet.Merge(dsDataSetChanges)
dsDataSet.AcceptChanges()
Catch eUpdate As System.Exception
Return False
ErrorHandled()
End Try
End If
Return True
End Function
Public Sub UpdateDataSource(ByVal dsChangedRows As DataSet, ByVal strTable As String)
Dim myDataAdapter As New SqlClient.SqlDataAdapter
Try
'The data source only needs to be updated if there are changes pending.
If (Not (dsChangedRows) Is Nothing) Then
'Attempt to update the data source.
myDataAdapter.Update(dsChangedRows, strTable)
End If
Catch updateException As System.Exception
ErrorHandled()
End Try
End Sub

MShirzadi
شنبه 02 دی 1385, 12:20 عصر
به نظر من فکر میکنم که شما باید قبل از اینکه دستور Update رو بنویسبد باید یک متغیر از نوع oledbCommandBuilder تعریف کنید یعنی :


Dim cb as new oledbCommandBuilder(da)
da.UpDate(ds,"tblName")

که در این کد da از نوع oledbdataAdapter تعریف شده است
امیدوارم جوابتو گرفته باشی

rezaei manesh
شنبه 02 دی 1385, 16:47 عصر
ضمن تایید حرف های دوستمون اگه مشکل شما حل نشد من یک مثال در این پست قرار دادم می تونید یه نگاهی به اون هم بندازید
http://barnamenevis.org/forum/showthread.php?t=57609