PDA

View Full Version : دو تا INSERT



shima2006
سه شنبه 20 مرداد 1388, 09:56 صبح
سلام
من یک جدول در SQL SERVER 2005 دارم که سه تا از فیلداش از این قراره
1- فیلد ID که Primery Key هست و به با استفاده از Identity مقدار دهی میشه
2- فیلدID2 که Forigne Key هست و طبیعتا باید برحسب جدولی که با اون ارتباط داره مقدار دهی بشه
3-فیلد Serial که یک شماره سریال که باید از 1000 شروع بشه و مثل فیلد Id هر بار یکی بهش اضافه شه

من نمی دونم برای فیلد دوم و سوم چطوری باید دستور Insert رو بنویسم
ضمنا من در کدی که در سی شارپ نوشتم یک دستور Inser دارم که بقیه فیلدها رو مقدار دهی می کنه ، شاید بهتر باشه که این دو تا Insert d یه جوری به با اون اولیه ادغام بشن!

دستور INSERT فعلی که باید کامل بشه یا دو تا INSERT دیگه اضافه شه ، نمی دونم

com.CommandText = "INSERT INTO automobile(kilometer,idsm,type,idcr,model,plaque,c hassis,motor,date)values('" + tkilometer.Text + "',N'" +csystem.SelectedValue + "','" +ttype.Text + "',N'" +ccolor.Text +"','"+tmodel.Text +"',N'"+tplaque.Text +"','"+tchassis.Text + "','" +tmotor.Text + "','"+lbldate.Text +"')";
com.ExecuteNonQuery();l
لطفا یک کم سریعتر بهم کمک کنید
متشکرم

shima2006
سه شنبه 20 مرداد 1388, 13:17 عصر
دوستان کسی نمی تونه به من کمک کنه؟؟؟؟:ناراحت:

mn_zandy63
سه شنبه 20 مرداد 1388, 13:24 عصر
برای فیلد سومت میتونی توی یک کوئری قبل از این٬ با گرفتن max٬ بزرگترین serial رو بگیری و یکی بهش اضافه کنی.
که البته توی بحث موازی٬ یکی از بدترین روشهاست ولی فعلا کارت رو راه میندازه تا دوستان بیان و روشهای بهتر رو توضیح بدهند.
برای فیلد اولت که خودش اضافه میشه.
برای فیلد دومت هم خوب باید بر اساس فیلد اون یکی جدولت مقداری که میخوای رو بریزی.
همش باید توی یک insert باشه.

Sociant
سه شنبه 20 مرداد 1388, 15:07 عصر
کوئری Insert که تو تاپیک قبلیتون گذاشتم رو تست کردین؟

shima2006
سه شنبه 20 مرداد 1388, 16:55 عصر
کوئری Insert که تو تاپیک قبلیتون گذاشتم رو تست کردین؟


بله ولی من دقیقا نمیدونم چطوری باید تستش می کردم اون دستور که شما نوشته بودید شامل یک insert و دو تا Select بود که موقع اجرا سیستم پیغام میده که باید تعداد فیلدها و مقادیر مساوی باشه فکر کنم دلیلش هم این باشه که من value رو در Insert مشخص نکردم

INSERT INTO automobile(serial,Extra)l

در ضمن من اصلا نمی دونم این دستور رو چطوری بنویسم، یعنی سه تا رو دنبال هم بنویسم و در یک Com.commandtext بریزم؟ یا اینکه اون دو تا دستور Insert باید جدا نوشته بشن؟

majid325
سه شنبه 20 مرداد 1388, 17:34 عصر
فیلد اول که درست ، ولی فیلد دوم و سوم چرا اسمش تو کوئری نیست؟
فیلد سوم که روش مقدار گیریش رو تو پست 3 دوستان توضیح دادن.
فیلد دوم:
شما در این سناریو در ساده ترین حالت یک جدول master و یک جدول Detail دارین که ما داریم در مورد جدول Detail صحبت میکنم ، خوب برای اینکه یک رکورد به جدول Detail اضافه بشه باید شما اول در جدول master رکورد مورد نظر رو انتخاب کنید(در غیر این صورت معنی نداره) ، خوب حالا ID جدول Masterرو به عنوان مقدار ID2 در جدول Detail ثبت کنید.

shima2006
سه شنبه 20 مرداد 1388, 21:20 عصر
کسی می تونه کدی که من در پست اول نوشتم رو کامل کنه؟؟؟
یعنی این کد رو طوری تغییر بدید که فیلدهای ID & ID2 رو هم INSERT کنه....
من واقعا خسته شدم انقدر با این دستور INSERT کلنجار رفتم:عصبانی++:

shima2006
سه شنبه 20 مرداد 1388, 21:34 عصر
فیلد سوم که روش مقدار گیریش رو تو پست 3 دوستان توضیح دادن.
فیلد دوم:
شما در این سناریو در ساده ترین حالت یک جدول master و یک جدول Detail دارین که ما داریم در مورد جدول Detail صحبت میکنم ، خوب برای اینکه یک رکورد به جدول Detail اضافه بشه باید شما اول در جدول master رکورد مورد نظر رو انتخاب کنید(در غیر این صورت معنی نداره) ، خوب حالا ID جدول Masterرو به عنوان مقدار ID2 در جدول Detail ثبت کنید.

باور کنید من همه اینها رو می دونم ولی نمی دونم این دستور یا کوئری رو چطوری باید بنویسم:گریه:

majid325
چهارشنبه 21 مرداد 1388, 02:41 صبح
باور کنید من همه اینها رو می دونم ولی نمی دونم این دستور یا کوئری رو چطوری باید بنویسم:گریه:

من نمیتونم باور کنم...


Cnn.Open();
Cmd1.CommandText = "SELECT Max(Tb_Book.ID) AS MaxOfID FROM Tb_Book;";
int MaxId = (int)Cmd1.ExecuteScalar();
Cmd2.CommandText = "INSERT INTO automobile(ID2,Serial,kilometer,idsm,type,idcr,mod el,plaque,c hassis,motor,date)values( " + "ID2" + "," + MaxId.ToString() + ",'" + tkilometer.Text + "',N'" + csystem.SelectedValue + "','" + ttype.Text + "',N'" + ccolor.Text + "','" + tmodel.Text + "',N'" + tplaque.Text + "','" + tchassis.Text + "','" + tmotor.Text + "','" + lbldate.Text + "')";
Cmd2.ExecuteNonQuery();
Cnn.Close();

اگه کدهاتو تو تگ کد بنویسی من و دوستان راحتر میخونیمش.
تو کد بالا اگه مقدار ID2 رو خودت سر جاش بنویسی درست میشه.

shima2006
چهارشنبه 21 مرداد 1388, 08:11 صبح
بالاخره درست شد:چشمک:
متشکرم majid325