PDA

View Full Version : سوال: update نشدن همزمان دو جدول



veniz2008
چهارشنبه 19 بهمن 1390, 11:20 صبح
سلام،من در بانکم 3 تا جدول دارم، جدول دانشجو،جدول درس و جدول اخذ درس. در جدول دانشجو،شماره دانشجویی رو کلید گرفتم،در جدول درس کلید ترکیبی هستش(کد درس،سال درس و ترم درس) و در جدول اخذ هم کلید ترکیبی هست(شماره دانشجویی،کد درس،سال درس و ترم درس)،حالا ارتباط بین این 3 جدول رو ایجاد کردم،واسه همین در دیاگرام،شماره دانشجویی از جدول دانشجو رو با drag & drop به فیلد شماره دانشجویی از جدول اخذ وصل میکنم(شماره دانشجویی جدول دانشجو به عنوان کلید اصلی و شماره دانشجویی جدول اخذ به عنوان کلید خارجی) و همچنین جدول درس رو با همین روش به جدول اخذ وصل کردم،حالا مشکلم اینه:میخوام وقتی درس رو ویرایش میکنم،این تغییرات بصورت خودکار درون جدول اخذم اعمال بشه،اینم بگم که فیلدهای کلید رو ویرایش نمیکنم و ویرایش بر روی فیلدهای غیرکلید هستش(مثلا درس با کد 100 برای سال 90 و ترم 2 رو اطلاعاتش رو نمایش میدم و فرضا نام درس و شهریه درس رو تغییر میدم)،حالا وقتی روی دکمه ویرایش کلیک میکنم فقط جدول درس ویرایش میشه و جدول اخذ تغییری نمیکنه،آیا باید برای جدول اخذ هم کد update جداگانه بنویسم؟،یعنی اون ارتباطی که در دیاگرام ایجاد کردم تاثیری بر update کردن همزمان نمیزاره؟اینم کدی که استفاده میکنم:

SqlCommand cmd = new SqlCommand("UPDATE Dars SET Title=N'" + TextBox2.Text +"',Money="+TextBox8.Text +" where Code="+TextBox1.Text +"and YearDars="+DropDownList1.SelectedValue + "and TermDars=" + DropDownList2.SelectedValue,con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Label2.ForeColor = System.Drawing.Color.Green;
Label2.Text = "ویرایش اطلاعات با موفقیت انجام شد";

hamid.karimy
چهارشنبه 19 بهمن 1390, 12:15 عصر
دوست عزیز طراحی شما اشتباه است.یه جدول به نام درس دارید که شامل نام درس و تعداد واحد وکد پیش نیاز و... آن است.یه جدول دیگه شامل جزئیات مربوط به هر ترم مانند سال درس و ترم درس و اینها.دانشجوت درسته.بعدش اخذ درس میشه شناسه جزئیات درس و شناسه دانشجو.اینجوری دیگه احتیاج به آپدیت دوتا جدول نیست.یه مبحثی تو طراحی دیتا بیس هست به نام normalize که از اصلیترین مباحثش اینه که تا حد امکان از دوبار وارد کردن اطلاعات خودداری شود.

veniz2008
چهارشنبه 19 بهمن 1390, 12:34 عصر
عجب!!!،میشه به من بگید که در اینصورت چطوری میشه لیست دروس ترم های قبلی دانشجو رو نمایش داد؟،طبق گفته شما من درون جدول اخذم شماره دانشجویی و نام درس و کد درس رو دارم،حالا میخواید چطوری select بزنی تا درس های مثلا 2 ترم قبلش رو درآری؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟،یا فرض کن میخوای درس ترم گشته رو به هر دلیلی ویرایش کنی،چطوری میخوای ویرایش کنی؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

hamid.karimy
چهارشنبه 19 بهمن 1390, 15:30 عصر
دوست عزیز گویا کیبوردتون مشکل داره چون زیاد علامت سوال میزنه.طبق طراحی که من گفتم یه جدول درس دارید که شامل آی دی ، عنوان و جزئیات مربوط به خود درس مانند تعداد واحد و پیشنیاز و چیزهایی که دارایی خود درس هستند.
یه جدول دیگه داری به نام جزئیات درس که شامل آی دی،آی دی درس،سال ارائه،ترو ارائه و جزئیاتی که مربوط به ترم می شود.جدول دانشجو که معلومه.می مونه جدول اخذ درس که شامل آی دی ، آی دی جزئیات درس ، آی دی دانشجو هست و جزئیاتی مانند نمره و اینا.حالا هر select که بلد نیستیو بگو تا بگم چجوری بزنی.البته من فقط برای موضوع صحبت شده طراحی کردم . واقعیت اینه که یه جدول ترم هم می خوای و یه جدول گروه آموزشی و ...

mhsmity
چهارشنبه 19 بهمن 1390, 17:17 عصر
وقتی داری ارتباط برای جداول درست می کنی نوع آپدیت شدنش رو
INSERT And UPDATE Specification
Delete Rule
Update Rule
Cascade
بذار

mahmoodof
یک شنبه 23 بهمن 1390, 14:07 عصر
سلام و خسته نباشيد دوستان گرامي
درباره ي ويرايش اطلاعات جدول سوالي داشتم.
من قبلا تو اين لينك (http://barnamenevis.org/showthread.php?327433-%D8%A7%D8%AF%DB%8C%D8%AA-%DB%8C%DA%A9-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7-%DA%AF%D8%B1%DB%8C%D8%AF-%D9%88%DB%8C%D9%88&p=1440081#post1440081) هم سوالم رو عنوان كردم ولي فكر كنم ، مكان مناسبي براي سوال كردن در رابطه با اپديت و ويرايش نبود.به همين خاطر اينجا سوالم رو پرسيدم.
من در رويداد load فرم در طراحي سايت ، با sqldatareader تمامي فيلدهاي جدول رو تك تك ، توي textbox ها ريختم.حالا با استفاده از يك button با sqlconnection و sqlcommand دستوراي اس كيو الي update رو نوشتم.
من ، براي ورودي اطلاعات ، از همون textbox ها استفاده كردم.
مراتب رو صحيح انجام دادم.هيچ مشكلي نداره و خطايي هم نميده.
مشكلي كه هست ، اينه كه زماني كه مقادير داخل textbox ها رو تغيير ميدم و روي button مربوط كليك ميكنم.عمل update به درستي انجام ميشه ، ولي هيچ گونه اطلاعاتي ويرايش نميشه !!!!!!!!!!!!!!!!!!!
هيچ تغييري در جدول مشاهده نميشه !!!!!
ممنون ميشم كه كمكم كنيد.
يا علي...

parand60
یک شنبه 23 بهمن 1390, 15:42 عصر
سلام mahmoodof
باید در textboxchaneged مقادیر textbox را update کنید
حالا مقادیر جدیدرا با دستورupdate ویرایش نمایید

mahmoodof
یک شنبه 23 بهمن 1390, 16:23 عصر
سلام دوست عزيز
ميشه بيشتر توضيح بدي ؟ اگر امكانش هست ، يه شبه كد برام بنويسي و توضيح بدي ، ممنون ميشم
يا علي...

mahmoodof
سه شنبه 25 بهمن 1390, 15:28 عصر
دوستان گرامي
سلام و خسته نباشيد ، كسي نيست جواب بده ؟؟؟؟؟ شما رو به خدا يكي جواب بده ! آخه لازم دارم

veniz2008
سه شنبه 25 بهمن 1390, 17:53 عصر
سلام دوست من،کد زیر رو داخل دکمه ویرایش قرار بده:


SqlConnection con = new SqlConnection("Data Source = (local); Initial Catalog = test1; Integrated Security = True");
SqlCommand cmd = new SqlCommand("Update users set number =@number,price=@price,name=@name where username=@username",con);
cmd.Parameters.AddWithValue("@username", TextBox1.Text);
cmd.Parameters.AddWithValue("@number", TextBox3.Text);
cmd.Parameters.AddWithValue("@price", TextBox4.Text);
cmd.Parameters.AddWithValue("@name",TextBox5.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

موفق و سربلند باشی

mahmoodof
شنبه 29 بهمن 1390, 17:26 عصر
سلام دوست من،کد زیر رو داخل دکمه ویرایش قرار بده:


SqlConnection con = new SqlConnection("Data Source = (local); Initial Catalog = test1; Integrated Security = True");
SqlCommand cmd = new SqlCommand("Update users set number =@number,price=@price,name=@name where username=@username",con);
cmd.Parameters.AddWithValue("@username", TextBox1.Text);
cmd.Parameters.AddWithValue("@number", TextBox3.Text);
cmd.Parameters.AddWithValue("@price", TextBox4.Text);
cmd.Parameters.AddWithValue("@name",TextBox5.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

موفق و سربلند باشی
سلام دوست عزيز
من اين كد رو ، در قسمت مربوطه نوشتم ، ولي هنوز اون مشكل رو دارم.
دستور ويرايش اطلاعات ، مشكلي نداره ، دستوري كه در form_load براي خواندن اطلاعات در textbox ها به وسيله ي sqldatareader نوشتم هم مشكلي نداره !
حتي شرط گذاشتم كه تعداد دستوارت اجرا شده در executenonequery اگر نامسواي صفر بود در يك ليبل بگه ، ويرايش انجام شد.بعد از كليك روي button ، تمام دستورات انجام ميشه و تابع executenonequery نامساوي صفر ميشه.ولي تغييرات ، انجام نميشه !!!
من كدها رو به صورت زير نوشتم:


public partial class edit : System.Web.UI.Page
{
SqlConnection con = new SqlConnection();
protected void Page_Load(object sender, EventArgs e)
{
con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|Database.mdf;Integrated Security=True;User Instance=True";

SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select name,family,username,pass,city,addressh,addressw,p ost,tell,cellphone,email from personal where username='"+Session["username"]+"'";
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
TextBox1.Text = dr["name"].ToString();
TextBox2.Text = dr["family"].ToString();
TextBox3.Text = dr["username"].ToString();
TextBox4.Text = dr["pass"].ToString();
TextBox5.Text = dr["city"].ToString();
TextBox6.Text = dr["addressh"].ToString();
TextBox7.Text = dr["addressw"].ToString();
TextBox8.Text = dr["post"].ToString();
TextBox9.Text = dr["tell"].ToString();
TextBox10.Text = dr["cellphone"].ToString();
TextBox11.Text = dr["email"].ToString();
}
con.Close();
}
protected void Button2_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "update personal set pass=@pass,city=@city,addressh=@addressh,addressw= @addressw,post=@post,tell=@tell,cellphone=@cellpho ne,email=@email where username='" + Session["username"] + "'";
cmd.Parameters.AddWithValue("@pass", TextBox4.Text);
cmd.Parameters.AddWithValue("@city", TextBox5.Text);
cmd.Parameters.AddWithValue("@addressh", TextBox6.Text);
cmd.Parameters.AddWithValue("@addressw", TextBox7.Text);
cmd.Parameters.AddWithValue("@post", TextBox8.Text);
cmd.Parameters.AddWithValue("@tell", TextBox9.Text);
cmd.Parameters.AddWithValue("@cellphone", TextBox10.Text);
cmd.Parameters.AddWithValue("@email", TextBox11.Text);
con.Open();
int i=cmd.ExecuteNonQuery();
con.Close();

if (i != 0)
{
Label14.Text = "اطلاعات شما با موفقيت ويرايش شد";
}
}
}

شما رو به خدا كمكم كنيد.
يا علي...