ورود

View Full Version : مشکل در Update کردن PK ها در Sql 2005 ..



hdv212
دوشنبه 06 فروردین 1386, 13:14 عصر
سلام و عیدتون مبارک
من یه جدول دارم که سه تا فیلد داره :
SenderRecieverID,Name,Description که فیلد SenderRecieverID، به صورت PK هست. حالا وقتی از طریق برنامه ی خودم تمام فیلدها از جمله فیلد PK رو که تغییر میدم و میخوام جدول رو Update کنم، به جای Update کردن همان رکورد یه رکورد جدید میسازه،ولی اگه بقیه ی فیلدها به غیر از فیلد PK رو تغییر بدم و Update کنم، درست عمل میکنه،مشکل فقط سر به روز کردن PK هست که باعث میشه یه رکورد جدید بسازه،ولی تو خود اس کیو ال درست انجام میده. من حتی کدشو از توی SqlProfiler کپی کردم تو برنامم ولی باز وقتی PK رو تغییر میدی دوباره یه رکورد جدید میسازه، مشکل کجاست ؟؟
اینم کد به روز رسانی :
UPDATE t_SenderRecievers SET SenderRecieverID = @SenderRecieverID, Name = @Name, Description = @Description WHERE (SenderRecieverID = @Param1) AND (Name = @Param2) AND (Description = @Param3)

ممنون

AminSobati
دوشنبه 06 فروردین 1386, 17:28 عصر
اگر Trigger دارین کنترلش کنین. به هر حال اونچه که مسلمه SQL Server رکورد اضافی نمیسازه، هر چی هست در کد شماست

hdv212
سه شنبه 07 فروردین 1386, 01:32 صبح
سلام و مرسی از جوابتون
من Trigger ای نساختم ... فقط میخوام جدول Update بشه،همین. مشکل اینجاس وقتی PK هم Update میشه،Sql به جای Update کردن همان رکورد،یه رکورد جدید میسازه..

iman_22a
سه شنبه 07 فروردین 1386, 02:01 صبح
کد بروز رسانی بانک اطلاعاتی توی برنامه تون رو اینجا بنویسید ...

hdv212
سه شنبه 07 فروردین 1386, 09:50 صبح
دوست عزیز تو اولین پست این تاپیک گذاشتم ..

Kamyar.Kimiyabeigi
سه شنبه 07 فروردین 1386, 10:56 صبح
hdv212 عزیز اگر کدتون رو به sp تبدیل کنین و از داخل برنامتون sp را صدا بزنین بازهم همین مشکل رو دارین؟

hdv212
سه شنبه 07 فروردین 1386, 23:41 عصر
نمیدونم کامیار جان، امتحان نکردم ولی آخه چرا اینطوری میشه؟؟ منطق Sql برای چنین وضعیتی چیه ؟؟

AminSobati
سه شنبه 07 فروردین 1386, 23:50 عصر
میتونین کدهایی که دقیقا این اشکال رو تولید میکنه به نحوی پست کنین تا بتونیم مشکل رو شبیه سازی کنیم؟ مسلما اشکال از SQL Server نیست

hdv212
چهارشنبه 08 فروردین 1386, 01:40 صبح
البته من کل کدی رو که در برنامه استفاده کردم رو اینجا قرار میدم .. به سی شارپه :

DataRow currentRow = this.ds_sendersRecievers1.t_SenderRecievers.Rows[this.dataGridView1.CurrentCell.RowIndex];
int currentRowIndex = this.dataGridView1.CurrentCell.RowIndex;

this.sqlConnection1.Open();
SqlTransaction tr = this.sqlConnection1.BeginTransaction();
SqlCommand command = new SqlCommand();
command.Connection = this.sqlConnection1;
command.CommandText = "UPDATE t_SenderRecievers SET SenderRecieverID = @SenderRecieverID, Name = @Name, Description = @Description WHERE (SenderRecieverID = @Param1) AND (Name = @Param2) AND (Description = @Param3)";
SqlParameter p1 = new SqlParameter("@SenderRecieverID", this.txt_code.Text);
SqlParameter p2 = new SqlParameter("@Name", this.txt_nameCompany.Text);
SqlParameter p3 = new SqlParameter("@Description", this.txt_description.Text);
SqlParameter p4 = new SqlParameter("@Param1", int.Parse(currentRow["SenderRecieverID"].ToString()));
SqlParameter p5 = new SqlParameter("@Param2", currentRow["Name"].ToString());
SqlParameter p6 = new SqlParameter("@Param3", currentRow["Description"].ToString());
command.Parameters.Add(p1);
command.Parameters.Add(p2);
command.Parameters.Add(p3);
command.Parameters.Add(p4);
command.Parameters.Add(p5);
command.Parameters.Add(p6);
command.Transaction = tr;
try
{
command.ExecuteNonQuery();
tr.Commit();
}

catch (SqlException se)
{
MessageBox.Show(se.ToString());
tr.Rollback();
}

catch (Exception er)
{
MessageBox.Show(er.ToString());
tr.Rollback();
}

finally
{
this.sqlConnection1.Close();
}
this.LoadData();
this.dataGridView1.CurrentCell = this.dataGridView1[0, currentRowIndex];

Pioneers
چهارشنبه 08 فروردین 1386, 01:55 صبح
من یکبار چنین مشکلی داشتم, که فهمیدم اشکال از حذف PK بوده است. بررسی کنید شاید بدلیلی حذف شده باشد. البته با عرض معذرت

hdv212
چهارشنبه 08 فروردین 1386, 13:07 عصر
PK که وجورد داره .. تو خود Sql server هم درست کار میکنه ولی تو برنامه نمیدونم چرا اینطوری میشه

hdv212
پنج شنبه 09 فروردین 1386, 16:32 عصر
بابا کسی نیست کمک کنه، کی میتونه اشتباهی توی این کد پیدا کنه :
UPDATE t_SenderRecievers SET SenderRecieverID = @SenderRecieverID, Name = @Name, Description = @Description WHERE (SenderRecieverID = @Param1) AND (Name = @Param2) AND (Description = @Param3)

aidin300
پنج شنبه 09 فروردین 1386, 18:56 عصر
سلام
این کد رو تست کردم با کد #C که تو پست های قبلی گذاشته بودی، و تو SSMS هم مستقیم اجرا کردم تو هر دو درست کار کرد. اگه ممکنه کل برنامه رو بذار اینجا تا رو برنامه خودت هم امتحان کنم
ببینم مشکل از کجاست