PDA

View Full Version : سوال: گرفتن ID از جدول1 ونمایش اطلاعات مربوط از جدول 2



Saman Ice
شنبه 06 خرداد 1391, 20:23 عصر
سلام
من 3 تا جدول دارم که تو یکیش آی دی رکوردهای 2تا جدول دیگه رو نگه میدارم
حالا میخوام از این جدول ای دی هارو بخونم و رکوردهای مربوط به اون ای دی رو از اون جدول اول بگیرم تو یه گریدویو نشون بدم
چطور باید این کار رو انجام بدم
ترجیحا با کد بگید
ممنون

ahmad156
شنبه 06 خرداد 1391, 20:49 عصر
دوست عزیز اگه درست متوجه شده باشم شما یه Table دارین که ارتباط بین 2 تا Table دیگه رو ایجاد میکنه.
پس اگر بخواین رکورد های معادل رو پیدا کنین باید از join استفاده کنین.


SELECT table1.*,table2.* from table1 INNER JOIN table2 ON table1.ID=table2.ID INNER JOIN table3.ID ON table2.ID=table3.ID

Saman Ice
شنبه 06 خرداد 1391, 21:10 عصر
ارتباط ندارن فقط ای دی هاشو تو یه جدول ذخیره شده
میخوام این ایدی هارو از جدول سوم بخونم یه جا ذخیره کنم بعد طبق اون ای دی ها از جدول اول رکوردهارو بخونم و بریزم تو گریدویو

ahmad156
شنبه 06 خرداد 1391, 21:28 عصر
دوست عزیز ارتباط هم نداشته باشن هم مشکلی پیش نمیاره باید جواب بده

Saman Ice
شنبه 06 خرداد 1391, 21:30 عصر
خب الان من این کد رو به چه صورت بنویسم که ای دی های ثبت شده تو جدول سوم رو بخونه و رکوردهای مربوطش رو از جدول اول بخونه تو گرید ویو نشون بده
اگه میشه کد رو کامل بنویسین

ahmad156
شنبه 06 خرداد 1391, 21:32 عصر
دوست عزیز فیلدهای table ها رو بذارین لطفا

Saman Ice
شنبه 06 خرداد 1391, 21:46 عصر
87499

87500
میخوام studentid رو از تکست باکس بیگیرم و lessonid های مربوط به اون رو از جدول دوم بخونم و تو گریدویو بریزم

ahmad156
شنبه 06 خرداد 1391, 21:59 عصر
SqlCommand command = new SqlCommand(string.Format("SELECT * FROM tb1 INNER JOIN tb2 ON tb1.lessonid=tb2.ID WHERE studentid={0}", Int32.Parse(txtStudentID.Text)));

Saman Ice
شنبه 06 خرداد 1391, 22:16 عصر
دوست عزیز با عرض شرمندگی که زحمت میدم
من این کد رو به صورت زیر در اوردم ولی وقتی روی دکمه کلیک میکنم چیزی به گریدویو اضافه نمیشه

SqlConnection conn = new SqlConnection("Data Source=saman-pc;Initial Catalog=University;Integrated Security=True");
conn.Open();
SqlDataAdapter MsgAdapter = new SqlDataAdapter();
DataSet MsgDataSet = new DataSet();
MsgAdapter.SelectCommand = new SqlCommand(string.Format("SELECT * FROM selectunits INNER JOIN lesson ON selectunits.lessonid=lesson.ID WHERE studentid={0}", Int32.Parse(idnum.Text)));
MsgAdapter.SelectCommand.Connection = conn;
MsgAdapter.SelectCommand.CommandType = CommandType.Text;
MsgAdapter.Fill(MsgDataSet, "lesson");
GridView1.DataSource = MsgDataSet;
GridView1.DataMember = "lesson";
conn.Close();

Saman Ice
یک شنبه 07 خرداد 1391, 04:08 صبح
دیتاگرید درست شد ولی اطلاعات هر 2 جدول رو باهم نشون میده
برای نشون دادن فقط یه جدول چیکار کنم

ahmad156
یک شنبه 07 خرداد 1391, 10:35 صبح
دوست عزیز از LEFT OUTER JOIN یا RIGHT OUTER JOIN استفاده کنین

Saman Ice
یک شنبه 07 خرداد 1391, 16:12 عصر
با مثال لطفا
با اینا اصلا آشنایی ندارم و نمیدونم چطوری بنویسم که کار کنه
به این صورت تغییر دادم ولی همچنان مثل قبل هر 2 جدول رو نشون میده
SqlCommand cmd1 = new SqlCommand(string.Format("SELECT * FROM selectunits RIGHT OUTER JOIN lesson ON selectunits.lessonid=lesson.ID WHERE studentid={0}", Int32.Parse(idnum.Text)), conn)

ahmad156
یک شنبه 07 خرداد 1391, 18:22 عصر
دوست عزیز به نظر من شما اول query نوشتن و انواع join ها رو مطالعه کنین جواب خیلی از سوال هاتون رو خودتون میتونین بدین.
در مورد left outer نیز به این شکل عمل میکنه که تمام فیلدهای جدول اول در join رو براتون میاره اگر معادلش در جدول دوم باشه یا نباشه. (برعکس inner join که باید حتما معادلش در جدول دوم باشه).شما میتونین به

SELECT *

بنویسین

SELECT tb1.*

البته فکر کنم که اشتباه کردم شما باید از این روش استفاده کنین و نه از outer join ها.:خجالت:

Saman Ice
یک شنبه 07 خرداد 1391, 18:23 عصر
خب الان این کدی که نوشتم درسته؟

ahmad156
یک شنبه 07 خرداد 1391, 18:57 عصر
نه دوست عزیز.با تایپیک قبلی درست میشه.(13)

Saman Ice
یک شنبه 07 خرداد 1391, 19:02 عصر
دوست عزیز واقعا ممنونم ازتون
ایشالا همیشه موفق باشید