PDA

View Full Version : ارور affected rowبه هنگام update



jannati
شنبه 16 آبان 1383, 15:34 عصر
دوستان سلام
من با کد زیر میخوام مقدار یک فیلد از یک جدول را تغییر بدم:


sql="update a_user set e_dat='"+m.GetSystemShamsiDate () +"' where username='" + use + "'";
SqlCommand cmd =new SqlCommand (sql, conn);
cmd.ExecuteNonQuery();

با این کد میخوام تاریخ آخرین مراجعه هرکاربر را نگه دارم.اما با خطای


1 rows affected by last query

مواجه میشم.لازم بذکر است که در enterprise managerیه کد ساده با Updateنوشتم که باز همین errorرو داد.(با کلید و بی کلید)
میشه بگید باید چیکار کنم؟ :cry:

AminSobati
شنبه 16 آبان 1383, 20:43 عصر
دوست عزیزم،
من خیلی سعی کردم مشکل شما رو شبیه سازی کنم ولی متاسفانه Error نداد.
لطفا یک Project دیگه New کنین، حداقل سطرهایی که برای ساختن Connection و Command استفاده میکنین رو اونجا Paste کنین. بعد از یکبار اجرا برای اطمینان از اینکه Error ظاهر میشه، این قسمت از Code رو Post بفرمایید.
ضمنا من دقیقا متوجه کاری که در EM انجام دادین و باز هم Error داد نشدم.
موفق باشید

jannati
یک شنبه 17 آبان 1383, 11:06 صبح
آقای ثباتی ؛با تشکر از توجهتون
اولا من با asp.netبرنامه را نوشتم .اینم کل کد اتصال به دیتابیس و اجرای sql:


SqlConnection conn=new
SqlConnection ("data source=DSRV3;initial;password=123456;persist security info=True;user id=jannati2;workstation id=JANATI;packet size=4096");
use=user.Text;
pass=password.Text ;
sql="select * from a_user where username='" + use + "' and pass='" +pass + "'";
SqlCommand cm =new SqlCommand (sql,conn);
cm.Connection.Open ();
SqlDataReader mm=cm.ExecuteReader ();
while (mm.Read ())
{
temp=mm["sath"].ToString().Trim ().Equals ("r");
sql="update a_user set e_dat='"+m.GetSystemShamsiDate () +"' where username='" + use + "'and pass='" +pass + "'";
SqlCommand cmd = new SqlCommand (sql, conn);
cmd.ExecuteNonQuery();
}

با این کدتاریخ آخرین مراجعه کاربر در دیتابیس ثبت میشه.


ضمنا من دقیقا متوجه کاری که در EM انجام دادین و باز هم Error داد نشدم.
خوب در این مورد منظورم این بودکه یک viewساختم وداخلش اس کیو ال updateرا روی همان جدول اجرا کردم و با همین errorمواجه شدم.
امیدوارم توضیحاتم کافی بوده باشه! :wink3: :<:

hmm
یک شنبه 17 آبان 1383, 11:13 صبح
ببخشید استاد دخالت میکنم



1 rows affected by last query

این که یک پیغام خطا نیست
تاییدیه برای انجام پرس وجوی مورد نظر است
درضمن فکر نکنم در view بشود اطلاعات رو تغییر داد (این رو آقای ثباتی بیشتر توضیح خواهند داد)

jannati
یک شنبه 17 آبان 1383, 12:17 عصر
این که یک پیغام خطا نیست
تاییدیه برای انجام پرس وجوی مورد نظر است
حرف شما صحیح .اما من وقتی درasp.netصفحه را اجرا میکنم با errorمواجه میشه و فقط وقتی این تیکه sqlرو مارک میکنم درست کار میکنه.برای همین این sqlرا بردم در یک viewو آزمایش کردم.

فکر نکنم در view بشود اطلاعات رو تغییر داد
اما من اینکار رو کردم.یعنی با همین کد update مقدار فیلد را تغییر میده .اما این پیغام هم ظاهر میشه.من فکر کردم شاید به خاطر این پیغام صفحه من در asp.net با این sqlاجرا نمیشه. :cry: :(

AminSobati
یک شنبه 17 آبان 1383, 12:51 عصر
دوست عزیزم،
من این کد رو به VB.NET تبدیل کردم و به مشکلی برخوردم که تعجب میکنم چطور شما برخورد نکردین!
دستور cmd.ExecuteNonQuery که در آخر نوشتین، پیغام میده که در حال حاضر یک DataReader با این Connection در حال استفاده هست و باید اول اون DataReader رو Close کنین.
ضمنا وقتی SELECT رو از روی نام کاربر و رمز عبورش انجام میدین، طبیعتا mm فقط یک رکورد خواهد داشت و استفاده از WHILE آیا نیازی هست؟
البته این فقط قسمتی از کد شما بوده و احتمالا قسمتهایی رو حذف کردین که به این کارها نیاز داشته. بگذریم...
Error برای من رخ نداد و تنها چیزی که در این شرایط به ذهنم میرسه اینه که به جای ارسال دستور UPDATE به طور مستیم، اون رو داخل Stored Procedure قرار بدین و پارامتر براش بفرستین.
در Query Analyzer اون Procedure رو بسازین و همونجا EXEC کنین، اگر Error نداد، بعد کد اصلی برنامه رو تغییر بدین و Procedure رو Call کنین.

AminSobati
یک شنبه 17 آبان 1383, 12:58 عصر
اما من وقتی درasp.netصفحه را اجرا میکنم با errorمواجه میشه و فقط وقتی این تیکه sqlرو مارک میکنم درست کار میکنه
Error منظورتون اینه که برنامه Break میکنه یا به شکل دیگه ای خودشو نشون میده؟ ضمنا کدوم دستور رو مارک میکنین مشکل بر طرف میشه؟


فکر نکنم در view بشود اطلاعات رو تغییر داد
با View هم امکان Update کردن هست ولی با محدودیتهایی. یعنی SQL Server دقیقا باید بدونه رکورد مورد نظر شما(برای Update) دقیقا به چه صورت از طریق View پیدا خواهد شد. این قسمتی از BOL هستش:


Updatable views can modify more than one table involved in the view. The DELETE, INSERT, and UPDATE statements can reference a view as long as SQL Server can translate the user's update request unambiguously to updates in the base tables referenced in the view's definition.
Expect differences in behavior when working with updatable views with more than one table involved in the DELETE, INSERT, or UPDATE statements.


برای اطلاعات بیشتر، این موضوع رو در BOL مطالعه بفرمایید:
Modifying Data Through a View