PDA

View Full Version : معادل#C این دستور چیست؟



shima2006
سه شنبه 06 مرداد 1388, 08:59 صبح
سلام
من یک سوال دارم که امیدوارم مربوط به همین تاپیک باشه:متفکر:

من قبلا کدی در ای اس پی کلاسیک نوشتم که آخرین رکورد رو برمی گردونه و بررسی می کنه فیلد Id اون چنده؟
اگه رکوردی قبلا ثبت نشده باشه شماره یک رو برمی گردونه اگه مثلا قبلا ده تا رکورد ثبت شده باشه شماره یازده رو برمی گردونه.
حالا نمی دونم معادل #C این کد چی میشه:متفکر:
کدASP

rs.open"select * from table orderby id"l
if rs.EOF then
count=1
else
rs.movelast
count=rs("id")l
count=count+1
rs.close
end if

sara62
سه شنبه 06 مرداد 1388, 12:49 عصر
سلام خانم شیما
شما با این کد میتوانید این کار رو انجام بدین

int id;
da = new SqlDataReader("select id from table1", con/*SqlConnection*/);
con.Open();
da/*SqlDataAdapter*/.Fill(ds/*dataset*/,"tablename");
int row = ds.Tables["tablename"].Rows.Count;
id = Convert.ToInt32(ds.Tables["tablename"].Rows[row]["id"])+1;
ds.Tables["tablename"].Clear();
con.Close();

mehdi.mousavi
سه شنبه 06 مرداد 1388, 13:17 عصر
سلام
من یک سوال دارم که امیدوارم مربوط به همین تاپیک باشه:متفکر:

من قبلا کدی در ای اس پی کلاسیک نوشتم که آخرین رکورد رو برمی گردونه و بررسی می کنه فیلد Id اون چنده؟
اگه رکوردی قبلا ثبت نشده باشه شماره یک رو برمی گردونه اگه مثلا قبلا ده تا رکورد ثبت شده باشه شماره یازده رو برمی گردونه.
حالا نمی دونم معادل #C این کد چی میشه:متفکر:
کدASP

rs.open"select * from table orderby id"l
if rs.EOF then
count=1
else
rs.movelast
count=rs("id")l
count=count+1
rs.close
end if





سلام.
این کارها برای چیه؟ جای اینکه اینهمه کد بنویسید، دستور SQL خودتون رو تغییر بدید:


SELECT MAX(ISNULL(Id, 0)) + 1 FROM [MyTable]

اما گذشته از این مساله، استفاده از چنین روشهایی برای بدست آوردن ID بعدی، زنگ خطری برای برنامه نویسه. می تونم بپرسم از این ID بدست اومده چه استفاده ای می خواهید بکنید؟

shima2006
سه شنبه 06 مرداد 1388, 14:59 عصر
بله حتما
خدا خدا می کردم یکی این سوال رو ازم بپرسه تا ببینم دارم کار درستی می کنم یا نه:خجالت:
من تویه تمام Table ها یک فیلد Id دارم که یکی از کاربردهای این فیلد برقراری ارتباط با جداول دیگه (البته ارتباط رو فقط در سطح برنامه ایجاد می کنم نه در سطح دیتابیس)است
من برای پر کردن فیلد Id از این روش استفاده می کنم یعنی قبلا در ای اس پی این کار رو می کردم خیلی خوب هم نتیجه می داد ولی حالا بهترین راه برای پر کردن این فیلد چیه واقعا نمی دونم:متفکر:

shima2006
سه شنبه 06 مرداد 1388, 15:18 عصر
ببخشید خانم سارا
من باید عینا کد شما رو بنویسم؟؟؟
یعنی اون ستاره ها و اسلش ها و ... هم لازم هستند؟

mehdi.mousavi
سه شنبه 06 مرداد 1388, 15:31 عصر
بله حتما
خدا خدا می کردم یکی این سوال رو ازم بپرسه تا ببینم دارم کار درستی می کنم یا نه:خجالت:
من تویه تمام Table ها یک فیلد Id دارم که یکی از کاربردهای این فیلد برقراری ارتباط با جداول دیگه (البته ارتباط رو فقط در سطح برنامه ایجاد می کنم نه در سطح دیتابیس)است
من برای پر کردن فیلد Id از این روش استفاده می کنم یعنی قبلا در ای اس پی این کار رو می کردم خیلی خوب هم نتیجه می داد ولی حالا بهترین راه برای پر کردن این فیلد چیه واقعا نمی دونم:متفکر:

بسیار خوب. همونطور که حدس زده بودم، کاری که انجام میدید اشتباه هستش...


اولین اشتباه اینکه ارتباط رو در سطح بانک برقرار نمی کنید! بانکی که توش Relation ای بین Entity های متفاوت نباشه که RDBMS نمیشه! اولین کاری که باید انجام بدید، اینه که بانک رو درست طراحی کنید و به کلیه قوانین حاکم بر این طراحی پایبند باشید.
فیلد مورد نظر رو از نوع Identity تعریف کنید و RDBMS رو ملزم به Generate کردن UniqueID ها برای این فیلد کنید. بدین ترتیب هر وقت رکورد جدیدی به این جدول اضافه بشه، خود RDBMS یک عدد Unique برای رکورد تولید می کنه و اگر نیاز داشته باشید، میتونید اونو از RDBMS بگیرید و کارهای دیگه احتمالی خودتون رو روی این رکورد انجام بدید.
اشتباه آخر، اما نه کم ارزش، این هستش که "خدا خدا می کنید که کسی این سوال رو ازتون بپرسه". جای اینکه برای این مسائل بخدا متوسل بشید، خودتون می تونید بسادگی بپرسید "میخوام فلان کارو انجام بدم. این روش به ذهنم رسیده... می خوام بدونم این روش صحیح هست یا راه بهتری برای حل این مساله وجود داره". به همین سادگی.

shima2006
سه شنبه 06 مرداد 1388, 16:14 عصر
=))
=))جالب بود ولی در عمل ساده نیست
اولا که صحبت کردن و سوال کردن زیاد تو این جور فروم ها خیلی سخته ، سوال معمولی رو نمیشه جواب گرفت وای به اینکه حالا بخوای همه سوالا رو مطرح کنی در واقع من اگه بخوام این طور سوالها رو بپرسم باید یک سال شبانه روز بشینم پای این فروم ها و سوال بپرسم اخر سرهم هر کس یک نظری میده و تازه واردی چون من حسابی سردرگم میشه(اینارو که میگم تجربه ثابت کرده ها)ا
دوما من میخوام یک ماه دیگه پروژه رو تحویل بدم اگه بخوام در سطح دیتابیس ارتباط برقرار کنم تا بیام اس کیو ال 2005 یاد بگیرم یک ماه تمومه!درسته؟
در آخر هم باید بگم من از یک برنامه نویس حرفه ای شنیدم که از Identity استفاده نکنم خیلی بهتره!واقعا اینطوریه؟
از راهنماییتون بسیار سپاسگذارم

mehdi.mousavi
سه شنبه 06 مرداد 1388, 16:44 عصر
جالب بود ولی در عمل ساده نیستاول شاید سخت بنظر برسه، اما بعد از مدتی، عادت میشه. در واقع، درست انجام دادن کارها براتون عادت میشه...


اولا که صحبت کردن و سوال کردن زیاد تو این جور فروم ها خیلی سخته، سوال معمولی رو نمیشه جواب گرفت وای به اینکه حالا بخوای همه سوالا رو مطرح کنی در واقع من اگه بخوام این طور سوالها رو بپرسم باید یک سال شبانه روز بشینم پای این فروم ها و سوال بپرسم اخر سرهم هر کس یک نظری میده و تازه واردی چون من حسابی سردرگم میشه(اینارو که میگم تجربه ثابت کرده ها)اخوب، پس ابتدا باید یاد بگیرید که "چطور یاد بگیرید"... یاد گرفتن هم متودولوژیهای خودش رو داره...


دوما من میخوام یک ماه دیگه پروژه رو تحویل بدم اگه بخوام در سطح دیتابیس ارتباط برقرار کنم تا بیام اس کیو ال 2005 یاد بگیرم یک ماه تمومه!
و اگر اینکارو نکنید، زندگی حرفه ای اتون تمومه. باور کنید.


در آخر هم باید بگم من از یک برنامه نویس حرفه ای شنیدم که از Identity استفاده نکنم خیلی بهتره!خوب، بازهم یک قدم به عقبتر برگردیم... لطفا کلمه "حرفه ای" رو تعریف کنید.

asefy2008
سه شنبه 06 مرداد 1388, 18:23 عصر
فیلد مورد نظر رو از نوع Identity تعریف کنید و RDBMS رو ملزم به Generate کردن UniqueID ها برای این فیلد کنید. بدین ترتیب هر وقت رکورد جدیدی به این جدول اضافه بشه، خود RDBMS یک عدد Unique برای رکورد تولید می کنه و اگر نیاز داشته باشید، میتونید اونو از RDBMS بگیرید و کارهای دیگه احتمالی خودتون رو روی این رکورد انجام بدید.
سلام دوست من میشه در این مورد بیشتر توضیح بدی ؟(من پایگاه نداشتم.)

mehdi.mousavi
سه شنبه 06 مرداد 1388, 21:24 عصر
سلام دوست من میشه در این مورد بیشتر توضیح بدی ؟(من پایگاه نداشتم.)

سلام.
لطفا توضیحات بیشتر رو در این سایت بخونید. (http://msdn.microsoft.com/en-us/library/ms191131.aspx) (البته این توضیحات برای SQLSERVER ارائه شده، اما در RDBMS های دیگه هم روش مشابهی وجود داره).

asefy2008
سه شنبه 06 مرداد 1388, 22:22 عصر
یه سوال،اون روشی که دوستان گفتن همیشه جوابگو نیست،درسته؟(حتی اگر تعداد رکوردها و کدها کم باشه.)یعنی ممکن است نتونیم با اون کدها ID رکورد بعدی رو بدست بیاریم.

shima2006
چهارشنبه 07 مرداد 1388, 09:12 صبح
مهدی 6755 عزیز،
1- چطور باید یاد بگیرم؟ متدلوژیهاش چیه ؟ (شاید قبل از هر کاری این مهمترین مسئله باشه!)ا
2- من هرگز نمی خوام زندگی حرفه ایم تموم بشه...
3- اگر خواستید به سوالات این چنینی جواب بدید به نظرم این فروم جایه مناسبی براش نباشه
shimakhalili65@yahoo.com
4- بالاخره من معادل#C اون کد رو لازم دارم یا نه؟باید از کجا شروع کنم؟

mehdi.mousavi
چهارشنبه 07 مرداد 1388, 11:07 صبح
یه سوال،اون روشی که دوستان گفتن همیشه جوابگو نیست،درسته؟(حتی اگر تعداد رکوردها و کدها کم باشه.)یعنی ممکن است نتونیم با اون کدها ID رکورد بعدی رو بدست بیاریم.

بله. درسته. چون ممکنه همزمان چند نفر به بانک متصل بشن و race condition بوجود بیاد (البته شرایط متنوع دیگه ای هم وجود داره!). بدین ترتیب هیچ ضمانتی نداره که ID ای که به اون روش بدست میاد، واقعا ID رکورد بعدی باشه...

Soroush.Sarabi
چهارشنبه 07 مرداد 1388, 11:14 صبح
=))

در آخر هم باید بگم من از یک برنامه نویس حرفه ای شنیدم که از Identity استفاده نکنم خیلی بهتره!واقعا اینطوریه؟


دوست عزیز این چه حرفیه آخه، من موندم واقعا این چه طور حرفه ای ...

(http://soroush-sarabi.blogspot.com)

mehdi.mousavi
چهارشنبه 07 مرداد 1388, 12:13 عصر
مهدی 6755 عزیز،
1- چطور باید یاد بگیرم؟ متدلوژیهاش چیه ؟ (شاید قبل از هر کاری این مهمترین مسئله باشه!)ا
2- من هرگز نمی خوام زندگی حرفه ایم تموم بشه...
3- اگر خواستید به سوالات این چنینی جواب بدید به نظرم این فروم جایه مناسبی براش نباشه
shimakhalili65@yahoo.com
4- بالاخره من معادل#C اون کد رو لازم دارم یا نه؟باید از کجا شروع کنم؟

سلام.

1. ابتدا باید خودتون رو بشناسید و بدونید چه چیزهایی شما رو به وجد میاره! باید نقاط قوت و ضعف شخصیتی خودتون رو بشناسید. باید بدونید علاقه مندیهاتون چیه و چرا وارد این حرفه شدید. آیا این (برنامه نویسی)، همون چیزی هستش که همیشه بدنبالش بودید؟ چه چیزی از این کار عایدتون میشه؟ آیا زمانی که بابت اینکار میذارید رو نمی تونید جای بهتری و بابت چیز با ارزشتری صرف کنید؟

وقتی به همه این سوالات به دقت و با شجاعت پاسخ دادید، اونوقت می دونید که آیا اصلا این حرفه برای شما مناسب هست یا خیر. اگر بنظرتون مناسب اومد و متوجه شدید که شما یک دارایی برای خودتون و خانوادتون محسوب میشید، اونوقت درک خواهید کرد که باید برای این دارایی زمان و هزینه صرف کنید.

اولین هزینه رو روی "زبان انگلیسی" برای خودتون صرف کنید. تصور کنید شرایطی رو که شما در اون شرایط بتونید به همون شیوایی که زبان مادری رو صحبت کرده و درک می کنید، زبان انگلیسی رو درک کنید و به این زبان سخن بگید، الان تو Google بدنبال چه چیزی می گشتید؟ آیا اصلا برای پرسیدن سوالی در مورد SQL Server به اینجا رجوع می کردید؟ (اشتباه نکنید! من نمیگم رجوع به اینجا بده، یا ...). خیر. احتمالا کتابی در این زمینه خریداری می کردید، پس از مطالعه اون، اگر سوالی داشتید، با نویسنده کتاب مطرح می کردید و به پاسخ سوالاتتون می رسیدید.

در واقع می خوام بگم بزرگترین مانع بر سر راه برنامه نویسهای ایرانی، متاسفانه ضعف در نوشتن و خوندن زبان انگلیسی هستش. بنابراین بعنوان یک دارایی، باید ابتدا زبانتون رو به حد قابل قبولی برسونید. من نمیدونم چند سالتونه، اما نسبت به تمام روزهایی که این کار رو پشت گوش انداختید، باید تلاشتون رو بیشتر کنید تا دوباره به چرخه زندگی برگردید.

وقتی زبانتون خوب شد، کتاب Google Hacks نوشته Tara Calashain رو خریداری کرده و اونو مطالعه کنید. این کتاب به شما یاد میده که چطور از Google برای خواسته های خودتون استفاده کنید. بقول Harley Hahn، نویسنده کتاب The Internet Complete Reference، همه بلدن چطور از اینترنت استفاده کنن، اما بلد نیستن چطور از اون بخوبی استفاده کنن. (خوندن این کتاب رو هم بهتون توصیه می کنم).

وقتی متوجه شدید که چطور از Google بخوبی استفاده کنید، اونوقت می تونید به سرچشمه تمام (یا حداقل اکثر) مطالبی که می خواهید برسید. ابتدا برای خودتون این مساله رو روشن کنید که در چه سطحی و برای چه سیستم عاملی و با چه تکنولوژی می خواهید کار کنید.

ابتدا یکی دو کتاب خوب، در زمینه سیستم عامل بخونید. برای اینکه برنامه ای که می نویسید، جزء شهروندهای درجه یک محیطی که قراره توش کار کنه باشه، باید ابتدا محیط زندگی این شهروند رو بخوبی بشناسید. این مساله ای هستش که اکثریت سرسری از کنارش می گذرن. شما باید بدونید (بعنوان مثال) ویندوز چطوری کار میکنه، تا بتونید برنامه ای درجه یک برای این محیط طراحی کنید. وقتی Event Handler ای برای فلان Event می نویسید اما نمیدونید چطوری این Event Handler فراخوانی میشه، چطور انتظار دارید برنامه ای درجه یک داشته باشید؟

برای یادگیری یک تکنولوژی، به سایت Amazon برید و تو اون زمینه بهترین کتب رو پیدا کنید. به رای مردم اطمینان کنید و از روی ستاره هایی که به کتب داده شده، بهترین ها رو انتخاب کنید. سپس دو کتاب برتر تو اون زمینه رو می تونید با رفتن به "شهر کتاب" سفارش بدید. تجربه نشون داده امروز کتابهای Apress پخته تر از ناشران دیگه هستش (البته بدون در نظر گرفتن McGrawHill و Prentice Hall). یادتون نره، شما یک دارایی محسوب میشید و تمام این هزینه ها، ارزش این دارایی رو بالاتر میبره. کتب رو بدقت بخونید و از تک تک نکاتی که یاد میگیرد در کارتون استفاده کنید. کدهای نوشته شده توسط برنامه نویسهای خوب دنیا رو زیاد بخونید و برای خودتون تحلیل کنید.

به دنبال پاسخ سوالات پایه ای باشید: روش اصولی انجام این کار چیه؟ متغیرهام رو چطوری باید نام گذاری کنم؟ به چه سبکی باید کد بنویسم؟ روشهای طراحی یک پروژه چیه؟ چرا اینقدر همه "امنیت امنیت" می کنن؟ SDL چیه و چی میگه؟ StyleCop کارش چیه؟ Hungarian Naming چی مگه؟ برای نوشتن برنامه تو C#، چه متودولوژیهایی وجود داره؟

خودتون رو ملزم به رعایت قوانینی کنید که امروزه در سطح دنیا در زمینه برنامه نویسی حاکمه و این الزام رو همواره در کارتون بهش پایبند باشید. قوانین رو تغییر ندید، و هر از گاهی مطمئن بشید که بر اساس آخرین قوانین کار رو انجام می دید. مدام در حال یادگیری باشید، فارغ از اینکه الان در چه دسته ای (مبتدی، متوسط، حرفه ای) طبقه بندی شده اید و این روند رو تا پایان عمرتون ادامه بدید. (بدلیل طولانی شدن، از ادامه مطلب صرف نظر می کنم).

2. خوبه. پس به قواعد انجام یک کار خوب، پایبند باشید.

3. اتفاقا اینجا جای مناسبی برای پاسخ به این سوال هستش، چون خیلی ها از مطالبی که گفتم بی اطلاع هستن.

4. شما باید فیلد مورد نظر در بانک رو بصورت IDENTITY تعریف کنید و اونو Primary Key جدول قرار بدید. سپس ارتباطات Entity های متفاوت در بانک رو برقرار کنید. (یادتون نره، حرف R در کلمه RDBMS مخفف Relational هستش!!!). سپس رکورد مورد نظر رو به بانک اضافه می کنید و از بانک می خواهید که ID تولید شده برای رکورد اضافه شده رو به شما برگردونه - با استفاده از IDENTITY، SCOPE_IDENTITY و ... (بر حسب شرایط). همه اینها رو می تونید توی MSDN بخونید. (یادتون نره، کتاب در این زمینه بگیرید و بخونید و یاد بگیرید که چطوری میشه یک بانک Relational طراحی کرد).

موفق باشید.

asefy2008
چهارشنبه 07 مرداد 1388, 13:32 عصر
ممنون از شما دوست عزیز mehdi6755 به خاطر مطلب خوبتون ولی چند چیز هم باید در نظر بگیریم مثلا الان خودم اون قدر علاقه مند به یادگیری مطالبی هستم که فرمودین (بیشتر از همه انگلیسی ) ولی متاسفانه سیستم آموزشی ما مشکل داره و کسی هم نمی آد اون رو درست کنه ( اکثر مطالب رشته کامپیوتر قدیمی ) و آدم رو اون قدر درگیر خوندن ریاضی و فیزیک و ... می کنن که اصلا وقت نمی کنیم اطلاعات خودمون رو در مورد کامپیوتر و برنامه نویسی بالا ببریم . بیشتر اساتید دانشگاه ها فقط به صورت تیوری یاد گرفتن و همون اطلاعات خودشون رو دارن به زور تو حلق ما میکنن دیگه نمی گن این ها برای آینده شغلی این بدبخت بدرد می خوره یا نه . ازاین ها گذشته اینجا(ایران) بهت میگن اطلاعات چه بدرد می خوره سی شارپ بلد باش استخدامی .

mehdi.mousavi
چهارشنبه 07 مرداد 1388, 14:07 عصر
الان خودم اون قدر علاقه مند به یادگیری مطالبی هستم که فرمودین (بیشتر از همه انگلیسی ) ولی متاسفانه سیستم آموزشی ما مشکل داره

من در مورد مشکلات صحبت نکردم. مشکلات همیشه هست و همواره نیز خواهد بود. اگر میخواهید کاری انجام بدید، خوب انجام بدید. فقط همین.


و آدم رو اون قدر درگیر خوندن ریاضی و فیزیک و ... می کنن که اصلا وقت نمی کنیم اطلاعات خودمون رو در مورد کامپیوتر و برنامه نویسی بالا ببریم.
اگر تو جوونی نتونید اطلاعاتتون را ارتقاء بدید، دیگه هرگز این فرصت رو پیدا نخواهید کرد که خودتون رو به جمع آدمهای مدعی اضافه کنید.


بیشتر اساتید دانشگاه ها فقط به صورت تیوری یاد گرفتن و همون اطلاعات خودشون رو دارن به زور تو حلق ما میکنن
تاسف انگیزه.


دیگه نمی گن این ها برای آینده شغلی این بدبخت بدرد می خوره یا نه.
اونها اونجا نیستن که فکر آینده شغلی شما باشن، اونها فکر درآمد خودشون هستن. طبیعتا، شما هم باید فکر دانش و آینده خودتون باشید.


ازاین ها گذشته اینجا(ایران) بهت میگن اطلاعات چه بدرد می خوره سی شارپ بلد باش استخدامی.

ببینید، استخدام داریم تا استخدام! برنامه نویس هست 300 هزار تومان در ماه میگیره، یکی هم هست 3 میلیون تومان میگیره. اینها از هم متفاوتن. چیزی که این دو دسته رو از هم جدا می کنه، نحوه سپری کردن زمانشون در طی روزه. و الا، هم این دسته، هم اون دسته، هر دو در ایران زندگی می کنن.

گذشته از اینها، شما وقتی گوشتون درد می کنه، از شاطر محل نمی خواهید براتون نسخه بپیچه. بلکه به پزشک مراجعه می کنید و ... در این مورد هم همینطوره. شما نباید از "هر کی" انتظار داشته باشید که "دوای درد شما" رو داشته باشه. اونی که میگه اطلاعات به چه درد میخوره، هرگز یک برنامه نویس نیست و نخواهد بود پس چطوری می تونه دیگران رو راهنمایی کنه و ...؟

موفق باشید.

asefy2008
چهارشنبه 07 مرداد 1388, 21:47 عصر
با تشکر از لینکی که دوستمون mehdi6755 معرفی کردن برای من که خیلی خوب بود.
حالا یه سوال دیگه دارم اگر بخوایم از مقدار ID آخرین رکورد در رکورد بعد به شکل زیر استفاده کنیم چه باید کرد:
من یه table دارم که دو تا فیلد داره یکی برای تاریخ روزانه و دیگری برای درآمد روزانه(هر دو از نوع استرینگ هستن) ، می خوام هر فاکتور که صادر میشه مبلغ کلش با توجه به این که روز تغیر کرده یا نه در جدول قرار بگیره.
اگر روز تغییر کرده باشه که مشکلی نیست ولی اگر تغییر نکرده باشه می خوام به مقدار قبلی اضافه بشه(این کار رو چه طور انجام بدم بهتره؟)

Mahdi.Kiani
چهارشنبه 07 مرداد 1388, 23:19 عصر
سلام
دوستان لطف کنید برای حفظ نظم تاپیک زیاد از مبحث اصلی تاپیک منحرف نشوید. (در برخی موارد اشاره به نکاتی خوب است ولی نه اینکه کل تاپیک به آن اختصاص یابد)
صحبت های بی ارتباط با موضوع تاپیک را از طریق پیام های خصوصی مطرح کنید./
موفق باشید

محمدامین شریفی
پنج شنبه 08 مرداد 1388, 10:52 صبح
لطفا توضیحات بیشتر رو در این سایت بخونید. (http://msdn.microsoft.com/en-us/library/ms191131.aspx)

یه سوال،اون روشی که دوستان گفتن همیشه جوابگو نیست،درسته؟(حتی اگر تعداد رکوردها و کدها کم باشه.)یعنی ممکن است نتونیم با اون کدها ID رکورد بعدی رو بدست بیاریم.

بله. درسته. چون ممکنه همزمان چند نفر به بانک متصل بشن و race condition بوجود بیاد (البته شرایط متنوع دیگه ای هم وجود داره!). بدین ترتیب هیچ ضمانتی نداره که ID ای که به اون روش بدست میاد، واقعا ID رکورد بعدی باشه...
اقا مهدی(mehdi6755),ما قبلا یک پرسش برامون پیش اومد,این تاپیک را هم که دیدیم,پرسشمون که حل نشد,بهش اظافه هم شد.در راستای بحث همین تاپیک, اینجا (http://barnamenevis.org/forum/showthread.php?t=169830) را هم یک نگاه کن.

shima2006
پنج شنبه 15 مرداد 1388, 09:17 صبح
سلام
من Relation بین جداول رو برقرار کردم و یک فیلد را به عنوان Primery Key که Identity هم می باشد در نظر گرفتم ولی باز هم مشکل اصلی به قوت خود باقی است!
مسئله اول اینکه من یک فیلد دیگر هم در همین جدول دارم که می خوام مثلا از عدد هزار شروع بشه و هر بار یکی به مقدارش اضافه بشه ولی از اون جایی که در یک جدول نمیشه بیش از یک فیلد Identity داشت درنتیجه نمی دونم چه طور باید هر بار یکی به این فیلد اضافه کنم
مهدی 6755 گفته بودن باید بنویسم:

SELECT MAX(ISNULL(ID,0))+1
FROM [My Table]l

ولی من نمی دونم چطور باید از این دستور استفاده کنم ، من می خوام وقتی آی دی رو به اضافه یک می کنم به جدول اضافه بشه ، مسلما این کار باید با دستور Insert انجام بشه اما چطوری نمی دونم.
مسئله دوم اینکه من یک فیلد دیگر هم در این جدول دارم که در واقع کلید خارجی محسوب میشه و باید مقدار اون رو از فیلدی که کلید اصلی در جدول دیگری هست بیارم و در این جدول Insert کنم ، که باز در این مورد هم نمی دونم چطور باید Insert کنم
متشکرم

shima2006
پنج شنبه 15 مرداد 1388, 18:54 عصر
میشه سریعتر من رو راهنمایی کنید که چطور باید این مقادیر رو در دیتابیس Insert کنم؟!:ناراحت:

Sociant
پنج شنبه 15 مرداد 1388, 23:25 عصر
INSERT INTO Table1
(id2, extra)
SELECT MAX(id2) + 1 AS Expr1,
(SELECT anyfield
FROM anytable
WHERE (otherfield = 'everyvalue')) AS Expr2
FROM Table1 AS Table1_1


با استفاده از این روش میتونید مشکلتون رو حل کنید
id2 همون فیلدی هست که میخواین مقدارش تو هر iNSERT افزوده بشه. البته باید مقدار اولیه 1000 تو فیلد باشه که از 1000 شروع بشه! فیلدی هم که IDENTITY تعریف کردین خودش تو هر iNSERT افزوده میشه

Sociant
پنج شنبه 15 مرداد 1388, 23:53 عصر
البته به نظرم تو طراحی دیتا بیس و دز نظر گرفتن موجودیت هاتون اشتباه کردین که الان به این مشکل و پیچیده گی تو کوئری رسیدین

shima2006
جمعه 16 مرداد 1388, 07:53 صبح
درمورد اون ای دی که از هزار شروع میشه من اصلا متوجه نمی شوم چرا همچین select ی نوشتید و به نظرم پیچیدگی خاصی هم وجود نداره من یک جدول دارم که در اون غیر از فیلدهایی که مقادیر اونها رو از داخل فرم می خونم سه فیلد دیگر دارم که مقدارشون از فرم (از کاربر) گرفته نمیشه
1-id automobile=primery key
2-id owner=foreign key
3-serial number که می خوام از هزار شروع بشه
خب اولی رو که کلید اصلی هم هست Identity در نظر گرفتم و هر بار خودش داره یکی اضافه میشه
ولی درباره اون دوتایه دیگه نمی دونم باید چیکار کنم:متفکر:

Sociant
جمعه 16 مرداد 1388, 10:53 صبح
پیچیدگی داره دیگه ،نگو نه :چشمک:
البته من از کاری شما از برنامه تون انتظار دارید خبر ندارم و تو جریان نیاز سنجی ها و تجزیه تحلیلش نبودم ولی مثلا شاید میشد این فیلدی که قراره از 1000 شروع بشه کلید اصلی یه جدول دیگه باشه.

حالا:
Select اول که مربوط میشه به نوع دیگه ای از Insert که بجای Value(فلان,بهمان) از این Select استفاده میشه که کارشم اینه که یه سری مقادیر رو از جایی ایتخراج کنه و بریزه تو جدول مورد اشاره در Insert (در اینجا همونTable1)

Select دوم هم واسه گرفتن مقدار فیلدیه که از جدول دیگه ای میخواین

shima2006
یک شنبه 18 مرداد 1388, 14:29 عصر
مگه دستور AS برای مواقعی نبود که می خواستیم یک فیلد غیر از فیلدهای ثابت جدول درست کنیم؟
Expr2 مگه یک نام Alias نیست؟
من یک فیلد به نام SERIAL دارم که باید از 1000 شروع بشه پس به جایه Id2 می نویسم Serial ولی
AS Expr1 یعنی چی؟
در select دوم هم As Expr2 یعنی چی؟
و از همه مهمتر From Table1 As Table1-1 یعنی چی؟
در خط اول هم گفتید Insert Into table1 (id2,Extra)l چرا؟
ببخشید اگر خیلی سوالاتم مبتدی بود

shima2006
دوشنبه 19 مرداد 1388, 06:30 صبح
من یک دستور Insert توی کدم دارم که بعد از اون دستور نوشتم:


com.CommandText = "SELECT max(serial)+1 FROM automobile";l
com.ExecuteNonQuery();l
ولی هیچ چیزی به فیلد سریال افزوده نشد،چرا؟ مگه نگفتید این دستور مثل یک دستور INSERT عمل می کند؟
لطفا یک نفر به من بگه چیکار باید بکنم....

محمدامین شریفی
دوشنبه 19 مرداد 1388, 09:14 صبح
مگه دستور AS برای مواقعی نبود که می خواستیم یک فیلد غیر از فیلدهای ثابت جدول درست کنیم؟

خیر.
برای این است که گاهی مواقع می خواهیم فیلد را با نام دیگری بخوانیم،برای مثال در join کردن ها.در واقع ما نام مستعار را برای خودمان ایجاد کردیم و فیلد جدیدی را در DB نمی سازد


Expr2 مگه یک نام Alias نیست؟

بله


من یک فیلد به نام SERIAL دارم که باید از 1000 شروع بشه پس به جایه Id2 می نویسم Serial ولی
AS Expr1 یعنی چی؟
در select دوم هم As Expr2 یعنی چی؟
و از همه مهمتر From Tabel1 As Table1-1 یعنی چی؟
در خط اول هم گفتید Insert Into table1 (id2,Extra)l چرا؟
ببخشید اگر خیلی سوالاتم مبتدی بود
as در واقع نام مستعار است.به این معنی که بعد از اینکه پرس و جو را از فیلد و یا فیلد های پایگاه داده است بعمل آوردی آنرا با نام دیگری در کد های ADO ذخیره کنی.
در ضمن اون Table1-1 نیست،Table1_1 هست

من یک دستور Insert توی کدم دارم که بعد از اون دستور نوشتم:




com.CommandText =

"SELECT max(serial)+1 FROM automobile";l

com.ExecuteNonQuery();l





ولی هیچ چیزی به فیلد سریال افزوده نشد،چرا؟ مگه نگفتید این دستور مثل یک دستور INSERT عمل می کند؟


لطفا یک نفر به من بگه چیکار باید بکنم....



لطفا کد کاملش را بنویسید.
شما اول به سراغ یادگیری کامل ADO.net بروید.سپس پرسشتان را مطرح کنید.
ADO.net را یک جستجو در این سایت بکنید و یا حتی insert و یا دستورهای دیگرش را جستجو کنید،دوستان خیلی در این باره بحث کرده اند.