PDA

View Full Version : Update requires a valid UpdateCommand when passed DataRow Collection with modified rows



majidgh
دوشنبه 14 خرداد 1386, 11:40 صبح
من از چند تا تکست باکس که به table بایند کردم استفاده می کنم و واسه update هم از table adapter استفاده کردم ولی موقع آپدیت کردن error زیر رو میده .


Update requires a valid UpdateCommand when passed DataRow collection with modified rows


اینم بگم که فقط وقتی میخوام آپدیت کنم این error رو میده . یعنی واسه add new مشکل نداره.

h_sadeghynejad
دوشنبه 14 خرداد 1386, 15:18 عصر
یا یک UpdateCommand برای Adapter تعریف کن یا یه CommandBuilder چون نمیدونه با چه دستوری باید Update کنه
موفق باشی

majidgh
دوشنبه 14 خرداد 1386, 20:56 عصر
من این کار رو هم کردم ولی نمیشه . قبلاً هم یه بار به همین مشکل برخوردم مجبور شدم کل برنامه رو از اول بنویسم چون هر چی رو عوض کردم درست نشد .

ghafoori
دوشنبه 14 خرداد 1386, 21:12 عصر
به احتمال بسیار زیاد یکی از این دو مشکل در پروژه شما است اول جدولتون فیلد کلید نداشته باشید یا از دستور join استفاده کردید

majidgh
سه شنبه 15 خرداد 1386, 10:01 صبح
یک update command تعریف کردم حالا این error رو میده ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
Concurrency violation: the UpdateCommand affected 0 of the expected 1 records

solmaz_zm
سه شنبه 15 خرداد 1386, 10:07 صبح
خیلی سخت کار می کنی...از دستورات update خود sql استفاده کنین راحت تر هستید..

Microsoft.net
سه شنبه 15 خرداد 1386, 10:16 صبح
یک update command تعریف کردم حالا این error رو میده ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
Concurrency violation: the UpdateCommand affected 0 of the expected 1 records

اگه این دستور رو توی updatecommand تون بزارید این خطا رو دیگه نمی ده : Set NoCount Off ولی منظور این خطا (warnning) اینه که هیچ عمل update ای روی بانکتون انجام نشده احتمالا یا پارامترها رو درست config نکردین یا توی ارسال پارامتر ها یه جای کار اشتباه کردین . به نظرم اگه با SQL کار میکنین SQL Profiler رو زیر نظر بگیرین ببینین چه پارامترهایی ارسال مشه .

majidgh
پنج شنبه 17 خرداد 1386, 10:24 صبح
به غیر از data adapter دیگه چه جوری میشه دیتا بیس رو آپدیت کرد ؟؟

choobin84
پنج شنبه 17 خرداد 1386, 10:59 صبح
به غیر از data adapter دیگه چه جوری میشه دیتا بیس رو آپدیت کرد ؟؟
با استفاده از تابع executeNonQuery در کد نویسی

majidgh
پنج شنبه 17 خرداد 1386, 11:25 صبح
خوب از این تابع چه جوری باید استفاده کنم . من که بلد نیستم .

CodeMasterX
جمعه 18 خرداد 1386, 01:55 صبح
اینجا فرض شده که اسم بانک شما MasterFile.mdb و اسم جدول شما Users هست که دو تا فیلد به اسم های Username,Pwd داره :



Imports System.Data
Imports System.Data.Oledb

Try
Dim dbname As String = Application.StartupPath & "\MasterFile.mdb"
Dim ConnStr As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbname & ";Persist Security Info=False"

Dim dbConn As New OleDb.OleDbConnection(ConnStr)
dbConn.Open()

Dim dbAdapter As New OleDb.OleDbDataAdapter("SELECT * FROM Users", ConnStr)
Dim DS As New DataSet("Users")
dbAdapter.Fill(DS, "Users")

Dim dbTable As DataTable = DS.Tables("Users")
Dim newRow As DataRow = dbTable.NewRow
newRow("Username") = "CodeMasterX"
newRow("Pwd") = "SomePassword"
dbTable.Rows.Add(newRow)

Dim cb As New OleDbCommandBuilder(dbAdapter)
dbAdapter.InsertCommand = cb.GetInsertCommand
dbAdapter.Update(DS, "Users")

dbTable.Dispose()
cb.Dispose()
dbAdapter.Dispose()
dbConn.Dispose()

MsgBox("Done.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
Catch ex As Exception
MsgBox(ex.ToString, MsgBoxStyle.Critical + MsgBoxStyle.OkCancel)
End Try



شما با ابجکت CommandBuilder حالا مربوط به تامین کننده داده تون باید برای DataAdapter مربوطه یک InsertCommand تعریف کنید که بعد از اون UpdateCommand توسط خود DataAdapter نوشته خواهد شد.

majidgh
جمعه 18 خرداد 1386, 10:20 صبح
از راهنمایی همه متشکرم.بالاخره مشکل من حل شد.

majidgh
جمعه 18 خرداد 1386, 10:48 صبح
یه سوال دیگه :
برنامه من تحت شبکه هست یعنی دو تا نسخه داره که همزمان به یه دیتا بیس وصل میشه .
من چطور می تونم توی نسخه سرور بفهمم که یه جدول رکورد جدیدی بهش اضافه شده یا نه ؟؟؟

CodeMasterX
شنبه 19 خرداد 1386, 02:23 صبح
با گرفتن وضعیت دیتا ست ها.

majidgh
شنبه 19 خرداد 1386, 16:16 عصر
من از datset.count استفاده می کنم ولی جواب نمی ده .
من یه دیتا گرید تو فرم دارم میخوام به محض اضافه شدن رکورد جدید به تیبل تو دیتا گرید نمایش بده .

sahar.hdr
جمعه 11 بهمن 1387, 19:46 عصر
با سلام براي آپديت قبل از دستو update از SqlCommandBuilde hsjthni ;ksn:


;(SqlCommandBuilder cb = new SqlCommandBuilder(Objdataadapter
;"(Objdataadapter.Update(Objdataset, "tblCustomer

و براي تغيير دادن ركورد خاصي از جدول با داشتن شماره ركورد كه مي تونيد با استفاده از بيندينگ بدست بياريد از دستو زير استفاده كنيد:
DataRow row;
row = ds.Tables["tblcustomer"].Rows[0];
row.BeginEdit();
row["fname_c"] = "Shaghayegh";
row["lname_c"] = "suncool";
row.EndEdit();
DataSet dataSetChanged = ds.GetChanges(DataRowState.Modified);
SqlCommandBuilder cb = new SqlCommandBuilder(Objdataadapter);
Objdataadapter.Update(Objdataset, "tblCustomer");



مشكل من كه حل شد
اميد وارم مشكل شما هم حل شه