PDA

View Full Version : سوال: خطا در برنامه بع علت ثبت تکراری کلید



veniz2008
جمعه 15 مرداد 1389, 16:08 عصر
سلام ،من یک مشکل با وبم دارم ،مشکلم اینه:من یک جدول درس دارم که برای ثبت درس جدید از اون استفاده میکنم ولی قبل از ثبت درس اول چک میکنم که آیا اون درس ثبت شده یا نه،اگر ثبت شده بود پیغام "درس وجود داره" رو بده و اگر هم جدید بود پیغام "درس جدید میباشد" رو صادر بکنه،تابعی که اینکار رو انجام میده مشکلی نداره و بخوبی کار میکنه،مشکل از اینجا شروع میشه که وقتی بجای پیغام دوم یعنی "درس جدید میباشد" از کد اضافه کردن درس استفاده میکنم و یک درس تکراری رو وارد میکنم،شرط اولم از کار میفته(به عبارت دقیقتر فقط اولین درس قدیمی رو میشناسه و بقیه درسهای جدولم رو شناسایی نمیکنه )و شرط دوم(اضافه کردن درس) میخواد اجرا بشه که با خطای sql با محتوای زیر روبرو میشم:
***message sql eror : Violation of PRIMARY KEY constraint 'PK_Dars'. Cannot insert duplicate key in object 'Dars'.
The statement has been terminated
من کد برنامه رو میذارم،محبت کنید کد رو تصحیح کنید:

public void sqlreader1(object sender, EventArgs e)
{

SqlConnection conn = new SqlConnection("Data Source = .\\Wincc;Initial Catalog=US_DB;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM Dars";
SqlDataAdapter Adapter = new SqlDataAdapter();

Adapter.SelectCommand = new SqlCommand();
Adapter.SelectCommand.Connection = conn;
Adapter.SelectCommand.CommandText = "SELECT * FROM Dars";

DataTable dt = new DataTable();

Adapter.Fill(dt);

string s1;


foreach (DataRow dr in dt.Rows)
{
s1 = (dr["Code"].ToString().TrimEnd());
if (TextBox1.Text == s1)
{

Label12.Text = "مشخصه وجود دارد";
break;
}

else

Label12.Text = "مشخصه جدید می باشد";

}
}

بجای else از کد زیر برای اضافه کردن درس جدید استفاده میکنم که مشکل مطرح شده پیش میاد:

strcon = ("Data Source = .\\wincc;Initial Catalog=US_DB;Integrated Security=True");
strsql = "SELECT * From Dars";
conn = new SqlConnection(strcon);
conn.Open();
Adapter = new SqlDataAdapter(strsql, conn);
Adapter.Fill(ds, "Dars");
newRow = ds.Tables["Student"].NewRow();
newRow["Code"] = TextBox1.Text;

newRow["Money"] = TextBox11.Text;
ds.Tables["Dars"].Rows.Add(newRow);
cb = new SqlCommandBuilder(Adapter);
Adapter.InsertCommand = cb.GetInsertCommand();
Adapter.Update(ds, "Dars");
con.Close();

daffy_duck376
جمعه 15 مرداد 1389, 16:26 عصر
دوست عزیز روش شما کاملا اشتباهه . شما با ید یه select بنویسی که شط اون نام درس باشه.بعد اون رو اجرا کنی و تعداد رکورد های نتیجه رو بشماری. حالا اگه تعداد رکورد ها ی نتیجه بیشتر از 0 بود نام درس تکراری هست

vbworm
جمعه 15 مرداد 1389, 18:50 عصر
متن حذف شد..... ببخشید سوال رو اشتباه فهمیده بودم:خجالت:

daffy_duck376
جمعه 15 مرداد 1389, 19:48 عصر
مشکل دوستمون رو شما متوجه نشدید.ایشون تکراری بودن رو میخوان تو بانک برسی کنن.ممکنه اون اسم تکراری 100 سال پیش وارد دیتابیس شده باشه .