PDA

View Full Version : سوال: مشکل در UPDATE رکورد



mehran63
سه شنبه 17 اسفند 1389, 11:12 صبح
سلام
با کد زیر کار update رکورد را انجام میدادم ولی فیلد code تغییر نمیکرد

private void btnUpdate_Click(object sender, EventArgs e)
{
int intposition;
SqlCommand objCommand = new SqlCommand();
intposition = objCurrencyManager.Position;

objCommand.Connection = objConnection;
objCommand.CommandText = "update tbuy set code=@code,name=@name," +
"model=@model,manufacturer=@manufacturer,sn=@sn," +
"country=@country,price=@price,count=@count," +
"date=@date,description=@description where code=@code";
objCommand.CommandType = CommandType.Text;

objCommand.Parameters.AddWithValue("@code", txtCode.Text);
objCommand.Parameters.AddWithValue("@name", txtName.Text);
objCommand.Parameters.AddWithValue("@model", txtModel.Text);
objCommand.Parameters.AddWithValue("@manufacturer",
txtManufacturer.Text);
objCommand.Parameters.AddWithValue("@sn",txtSN.Text);
objCommand.Parameters.AddWithValue("@country", txtCountry.Text);
objCommand.Parameters.AddWithValue("@price",txtPrice.Text);
objCommand.Parameters.AddWithValue("@count",txtCount.Text);
objCommand.Parameters.AddWithValue("@date", txtDate.Text);
objCommand.Parameters.AddWithValue("@description",
txtDescription.Text);


objConnection.Open();
try
{
int i = objCommand.ExecuteNonQuery();
if (i == 1)
MessageBox.Show("اطلاعات شما با موفقیت ثبت شد");
}// end try
catch (SqlException sqlExceptionErr)
{
if (sqlExceptionErr.Number == 2627)
MessageBox.Show("اين کد قبلا ثبت شده");
else
MessageBox.Show(sqlExceptionErr.Message);
}// end catch
objConnection.Close();

FillDataSetAndView();
BindFields();

objCurrencyManager.Position = intposition;
ShowPosition();

toolStripStatusLabel1.Text = "Record Updated";

}// end btnUpdate_Click

بعد این تغییرات رو انجام دادم ولی هر چی وارد میکنم میره تو catch میگه این کد قبلا ثبت شده. لطفا بگید که چه کنم

objCommand.CommandText = "update tbuy set code='"+ txtCode.Text +"',name=@name," +
"model=@model,manufacturer=@manufacturer,sn=@sn," +
"country=@country,price=@price,count=@count," +
"date=@date,description=@description where code=code";

f4rib0rz
سه شنبه 17 اسفند 1389, 12:51 عصر
خب معلومه که باید اررور بده . چون فیلد code (اگه اشتباه نکنم) کلید اصلیه واسه update نباید دوباره فیلد کد رو بفرسدی واسه update فقط کد رو بفرست برای where .



objCommand.CommandText = "update tbuy set name=@name," +
"model=@model,manufacturer=@manufacturer,sn=@s n," +
"country=@country,price=@price,count=@count," +
"date=@date,description=@description where code=code";

Reza_Yarahmadi
سه شنبه 17 اسفند 1389, 14:14 عصر
دوست عزیز در صورتیکه میخواید کد (که کلید اصلی هم هست) رو تغییر باید کد قدیم و کد جدید رو با هم داشته باشید.
توی دستوری که نوشتید(دستور اول) بر اساس کدی که واسش میفرستید جستجو انجام میشه ، اگر کد ، کد جدید باشه خب رکوردی با این کد ندارید که بتونه اونو پیدا کنه و تغییر بده. در صورتی هم که پیدا کنه شما کد رو به همون مقدار خودش تغییر میدید(در واقع تغییری نمیدید). دستور دوم هم با قبلی فرقی نمیکنه. تغییر سوم هم چون به ازا هر رکورد شرط Code = Code درست است برای تمام رکوردها میخواد تغییرات رو اعمال کنه که بالطبع بدلیل اینکه کد باید یونیک باشه بهتون خطا میده.
روش کار به این صورته که شما باید بر اساس کدقدیم جستجو کنید و کد رو با کدجدید مقدار دهی کنید.
Update tbuy Set Code = @NewCode Where Code = @OldCode

mehran63
جمعه 20 اسفند 1389, 10:13 صبح
متشکر از دوستان عزیز
ولی متوجه نمیشم که چه طور کد قدیم و کد جدید رو از هم تفکیک کنم
اگه یک نمونه کد کاملتر بگذارید ممنون میشم

mehran63
شنبه 21 اسفند 1389, 10:37 صبح
متشکر میشم اگه دوستان راه حلی بدن

ehsanara
شنبه 21 اسفند 1389, 11:13 صبح
اگه نمیخوای Code تغییر کنه اون رو از لیست SET بردار و فقط تو Where بزار باشه
اگه میخوای Code هم تغییر کنه بیا مقدار جدید Code رو تو SET بزار و مقدار قبل رو تو Where

اگه مورد دوم هست باید از این
objCommand.Parameters.AddWithValue("@code", txtCode.Text);
دو تا تعریف کنی که @code و txtCode.Text رو باید تغییر بدی

mehran63
شنبه 21 اسفند 1389, 11:37 صبح
میخوام کد تغییر کنه ولی مقدار جدید و قدیم رو نمیدونم چه جوری تفکیک کنم کد بالا رو هم اگه کاملش رو بزارید خیلی لطف کردید

ehsanara
شنبه 21 اسفند 1389, 11:45 صبح
یه رشته به اسم OldC درست کن و مقدار فعلی Code رو بریز داخلش


objCommand.CommandText = "update tbuy set code=@Newcode,name=@name," +
"model=@model,manufacturer=@manufacturer,sn=@s n," +
"country=@country,price=@price,count=@count," +
"date=@date,description=@description where code=@Oldcode";


اینم اضافه کن


objCommand.Parameters.AddWithValue("@Oldcode", OldC);

mehran63
شنبه 21 اسفند 1389, 11:54 صبح
من اصلا متوجه این کدی که گذاشتید نمیشم اگه لطف کنید C# کنید ممنون میشم فکر کنم بین تگ C# نذاشتید
در ضمن نمیدونم که چه جوری به یک فیلد دسترسی داشته باشم تا بتونم اون فیلد رو تو OldC بزارم

ehsanara
شنبه 21 اسفند 1389, 14:00 عصر
آره ، نمیدونم چرا کد اسنطور نشون داده میشه

مقداری رو که تو شرط
WHere Code = @code
قرار دادی از کجا خوندی؟
مقدار OldC میشه همون مفدار شرط (یعنی Where Code = @Code)و مقدار جدیدت هم میشه مقداری که توی SET گذاشتی (یعنی Set Code = @Code)
ولی نباید هر دو به یه اسم باشن
میتونی Code@ رو به دو اسم دیگه تعریف کنی برا اولی NewCode@ و برا دومی OldCode@

"SET Code = @NewCode Where Code = @OldCode

objCommand.Parameters.AddWithValue("@OldCode", OldC);
objCommand.Parameters.AddWithValue("@NewCode", txtCode.Text);

mehran63
شنبه 21 اسفند 1389, 17:56 عصر
بزار اصلا کاملتر توضیح بدم
من چند تا تکست باکس روی فرمم دارم که داده های توی بانک رو توش با کدی که نوشتم نشون میده و با کلید هایی رکورد به جلو یا عقب هم میره ولی در update کردن فیلد کد به مشکل برخوردم و نمیدونم که مقدار داخل فیلد code که در بانک sql هستش رو چه جوری در یک متغییر بزارم

mehran63
یک شنبه 22 اسفند 1389, 11:34 صبح
لطفا یکی بگه چه جوری میتونم به یک فیلد دسترسی داشته باشم
مثلا بگم اگر فیلد code برابر با فلان مقدار بود
اگر یک نمونه کد بزارید ممنون میشم

ehsanara
یک شنبه 22 اسفند 1389, 12:06 عصر
یه کار راحت تر
یه رشته به اسم OldCode درست کن
حالا که مقادیر رو به textBox منتقل می کنی بیا زمانی که txtCode رو مقدار میدی OldCode رو هم مقدار دهی کن مثلا
txtCode.text = OldCode = ???;
که ؟؟؟ روشی هست که الان داری مقدار میدی
بعد بیا تو شرط Update مقدار OldCode رو بزار
SET Code = txtCode WHERE Code = OldCode
البته این کد رو باید درست کنی

ehsanara
یک شنبه 22 اسفند 1389, 12:08 عصر
اگه بازم نشد بگو

اگرم خواستی فایل کد فرم رو بزار تا درستش کنم برات