PDA

View Full Version : insert در جدول



Bahar_HS
دوشنبه 18 شهریور 1387, 17:33 عصر
با سلام
در مورد nsertر جدول چند تا سوال دارم ،
برای saveکردن داده یی که کابر (در کادرهای متنی)وارد می کنه ،متد زیر رو نوشتم که Errorlمی ده :

if (textBox1.Text != null)
strname = textBox1.Text;
else

strmess =

" نام را وارد کنید";

if (textBox2.Text != null)
strfamily = textBox2.Text;
else
strmess +=


" نام خانوادگی راوارد کنید\n";

if ((radioButton1.Checked == false) && (radioButton2.Checked == false)
&& (radioButton3.Checked == false) && (radioButton7.Checked == false))
strmess += "مقطع تحصیلی را مشخص کنید\n";
else
{
if (radioButton1.Checked == true)
strtahsil = "دکترا";
elseif (radioButton2.Checked == true)
strtahsil = "کارشناسی";
elseif (radioButton7.Checked == true)
strtahsil = "کارشناسی ارشد";
elseif (radioButton3.Checked == true)
strtahsil = "کاردانی";
}

cmd.Connection = con ;
cmd.CommandText = string.Format(" INSERT into Table1 (name,family,degree) VALUES('{0}','{1}','{2}'')",strname,strfamily,strdegreel,,


Error 1 Use of unassigned local variab'strname'


ولی به رشته هایی که برای مقدار دهی به صورت محلی در متد تعریف شده ایراد می گیره،ایرادش چیه؟


وسوال دومم اینه که اگر فقط از sqlcommandو Sqlconnection استفاده کنم کافیه یا در کار با ADO.netاز کلاسهای دیگه مثلDataTable
BindingManagerBase و...
هم حتما باید استفاده بشه ؟

Moslemu
دوشنبه 18 شهریور 1387, 18:00 عصر
سلام.
خوب این Error میگه که شما از strname قبل از اینکه اونو مقدار دهی کنید استفاده می کنید. این طور نیست؟
یعنی حتماً مقدار دهی شده؟!

Blackk_lightt
دوشنبه 18 شهریور 1387, 18:30 عصر
سلام
Sql Connection برای وصل شدن به بانکه و Sql Command برای اجرای دستوراتت روی بانکه
حالا اگه دستورات خروجی نداره (مثل Insert) که کافیه
ولی اگه مقدار برگشتی داره (مثل Select) کلاسهای دیگه ای هم میخای
مثل DataReader

Bahar_HS
سه شنبه 19 شهریور 1387, 12:00 عصر
با سلام
ابتدای متد رشته هایی رو که لازم داشتم تعریف کردم،مثلا برای textBox نام رشته ی strnameرو تعریف کردم ، ابتدا ،برنامه ورودیtextBoxرو چک می کنه واگر کاربر نام رو وارد کرده با شه این رشته باtextBox.Text مقداردهی میشه ودرغیر این صورت به کاربر پیغام میده که که نام رو وارد کنه،( برنامه 7تا textBox وچند تا combobox داره)
وبرای هموشون رشته تعریف کردم که اول کنترل ها رو چک می کنه و بعد رشته ها رو به همین شیوه مقداردهی میکنه،
البته یه چیزه دیگه هم هست ( نمی دونم ربط داره یا نه) اینکه فیلدهای جدول باید ullپذیر تعریف بشن،اگر کابر بعضی از قسمت ها رو تکمیل نکرد ،برنامه پیغام بده ولی اگر کاربر خواست می تونه رکورد رو همین طوری ذخیره کنه.

وپایگاه داده ها همه ی عملیاتهای ذخیره ،بازیابی،جستجو،حذف وویرایش رو باید انجام بده،
گفتید علاوه بر Sqlcommand که با دستوراتSql مقدار دهی میشه ، دستورات دیگه ای هم لازمه،
مدتی هست که دارم در این باره Search میزنم ، ولی هنوز اطلاعاتم کامل نیست ، ودر مورد ارتباط و اتصال به پایگاه داده ها ابهام دارم ، ممنون میشم اگر راهنمایی کنید، ADO.net برای ارتباط با پایگاه داده چندین کلاس داره ولی هنوز توی اینکه هر کدوم چکار می کنند اشکال دارم . :متفکر:
با سپاس

mehdi.mousavi
سه شنبه 19 شهریور 1387, 13:11 عصر
با سلام
در مورد nsertر جدول چند تا سوال دارم ، برای saveکردن داده یی که کابر (در کادرهای متنی)وارد می کنه ،متد زیر رو نوشتم که Errorlمی ده :

سلام.

1. نیازی به نوشتن چنین کدی ندارید:


textBox1.Text != null

چرا؟ چون در کلاس TextBoxBase جاییکه Text Property رو Override کردن، چک null بودن value ای که دارید Set میکنید، انجام میشه و شما نمیتونید به این خصیصه null رو Assign کنید. یعنی اینکارو که انجام بدید، خودش String.Empty رو در متغییر text قرار میده. پس جای نوشتن کد بالا، میتونید بنویسید:


textBox.Text.Length > 0

2. بخاطر خدا، از Dynamic SQL ها استفاده نکنید. نوشتن چنین کدی، جز دردسر براتون چیزی به ارمغان نمیاره. این مساله به کرات اینجا عنوان شده، اما بازم تو نمونه کدهایی که اینجا ارسال میشه، عدم توجه به این مساله مشاهده میشه.

3. برای رفع ایرادی که عنوان کردید، جاییکه strmess رو تعریف کردید، اینطور بنویسید:

String
strmess = String.Empty;

maalimom
سه شنبه 19 شهریور 1387, 14:57 عصر
سلام دوست عزیز اگه واقعا این آنالیز شما برای نوشتن برنامه هست خیلی اشتباه کاری به دستورات ندارم او نا بلاخره جواب میده ولی خدا کنه این یک تست برنامه نویسی باشه
maalimom@yahoo.com

mehdi.mousavi
سه شنبه 19 شهریور 1387, 17:10 عصر
سلام دوست عزیز اگه واقعا این آنالیز شما برای نوشتن برنامه هست خیلی اشتباه کاری به دستورات ندارم او نا بلاخره جواب میده ولی خدا کنه این یک تست برنامه نویسی باشه maalimom@yahoo.com

متوجه نشدم. آنالیز؟ تست برنامه نویسی؟ "بالاخره جواب میده"؟ میشه بیشتر توضیح بدید؟

Bahar_HS
سه شنبه 19 شهریور 1387, 17:44 عصر
با سلام
از همه ی کابرانی که لطف کردند و سوالم رو خوندند و راهنمایی کردند سپاسگزارم

من هم متوجه نشدم " آنالیز؟ تست برنامه نویسی؟ "بالاخره جواب میده؟" یعنی چی؟

بله ، شما درست گفتید،کدم رو تغییر دادم واین طور نوشتم:

if(textBox1.Text.Trim() .Lengh < 1 )&&(comboBox1.Text.Trim().Lengh < 1) &&
(radioButton.checked == false


و حا لا برنامه Build میشه ولی DeBug نمیشه
اگه بخوام درست و حسابی سی شارپ کار کنم از کجا باید شروع کنم؟
با یه کتاب آموزش سی شارپ شروع کردم ولی حالا می بینم که هنوز تو نقطه ی صفرم ،
ویه پروژه(برای واحد کارآموزی ) که رو دستم مونده ،


ودرمورد اینکه ازSql استفاده نکنم ،
میشه بگید از چه روشی استفاده کنم ،
با سپاس

mehdi.mousavi
سه شنبه 19 شهریور 1387, 20:36 عصر
با سلام
از همه ی کابرانی که لطف کردند و سوالم رو خوندند و راهنمایی کردند سپاسگزارم

من هم متوجه نشدم " آنالیز؟ تست برنامه نویسی؟ "بالاخره جواب میده؟" یعنی چی؟

بله ، شما درست گفتید،کدم رو تغییر دادم واین طور نوشتم:

if(textBox1.Text.Trim() .Lengh < 1 )&&(comboBox1.Text.Trim().Lengh < 1) &&
(radioButton.checked == false


و حا لا برنامه Build میشه ولی DeBug نمیشه
اگه بخوام درست و حسابی سی شارپ کار کنم از کجا باید شروع کنم؟ با یه کتاب آموزش سی شارپ شروع کردم ولی حالا می بینم که هنوز تو نقطه ی صفرم ، ویه پروژه(برای واحد کارآموزی ) که رو دستم مونده ، ودرمورد اینکه ازSql استفاده نکنم ، میشه بگید از چه روشی استفاده کنم ،
با سپاس


سلام.
چون گفتن آنالیز، اجازه بدید یه خرده هم در مورد مشکلات دیگه ای که کدتون داره صحبت کنم. مهمترین مشکلی که کد شما داره، ترکیب کد UI با DAL هستش. در واقع درستش اینه که شما از طریق Command Pattern ها، Command ای صادر کنید تا عمل Insert انجام بشه. Command مورد نظر بنوبه خودش باید با لایه خارجی (Facade) کار کنه، و Facade هم با DALC. به این ترتیب، یک الگوی مناسب رو در برنامه اتون جاری میکنید.

مساله بعدی که میشه ازون یاد کرد، عدم استفاده صحیح از Connection ها و به طبع اون Connection Pooling هستش. طبق الگوهای استاندارد، اگر کلاسی IDisposable رو Implement کرده باشه، شما بعد اینکه کارتون با اون کلاس تموم شد، باید Dispose رو روش Call کنید. بهترین استفاده از Connection Pooling هنگامی رخ میده که به محض اینکه کارتون با Connection تموم شد، اونو آزاد کنید که در کد شما این اتفاق نیفتاده.

مساله مهم دیگه در مورد کد شما، عدم استفاده از String Table ها (در واقع Resource ها) به منظور نگهداری جملاتی هستش که در کد، Hard Code کردید. روش صحیح این هستش که اون رشته ها رو در Resource ها نگهداری کنید، و اینجا، اون Resource ها رو Reference کنید.

در نهایت، آخرین چیزی که به ذهنم میرسه، و کدتون رو میتونه خوانا کنه، نوشتن


!radioButton1.Checkedبجای


radioButton1.Checked == falseهستش. البته، عدم اسم گذاری صحیح متغیر ها، چه از نظر Hungarian Naming (اگر میخواهید رعایت کنید، باید همه جا رعایت کنید) و چه از نظر معنایی (مثلا radioButton1 اسم خیلی بدی هستش، چون به برنامه نویس نمیگه که این Radio Button هدفش چیه) رو نباید فراموش کرد.

پاورقی: من نگفتم از SQL استفاده نکنید، گفتم از Dynamic SQL ها استفاده نکنید. یعنی اینطور تو کد قسمتهای مختلف یک دستور SQL رو به هم نچسبونید و ... اگر از Stored Proc. ها استفاده کنید، یا از Parametric Command ها، مشکلی که بهش اشاره کردم (SQL Injection) رخ نخواهد داد.

Bahar_HS
چهارشنبه 20 شهریور 1387, 15:49 عصر
با سلام
از راهنمایی تون خیلی ممنون،
همه ی سوالها رو جواب دادید بجز آخری،
"چطور واز کجا شروع کنم وچطور ادامه بدم؟"

وقتی به یه قطعه کدی ،که فکر می کردم نوشتنش ساده باشه، این همه ایراد وارده،پس حالا حالا ها جای کار داره تا کدنویسیم به حد قابل قبولی برسه،


در مورد مطلبی که در مورد لایه هاو ترکیب UIو DAL گفتید ممکنه بیشتر توضیح بدید؟
اینطوری نوشتن کد چه تغییری می کنه ؟
با سپاس وبا آرزوی موفقیت

mehdi.mousavi
پنج شنبه 21 شهریور 1387, 00:10 صبح
با سلام
از راهنمایی تون خیلی ممنون،
همه ی سوالها رو جواب دادید بجز آخری،
"چطور واز کجا شروع کنم وچطور ادامه بدم؟"

وقتی به یه قطعه کدی ،که فکر می کردم نوشتنش ساده باشه، این همه ایراد وارده،پس حالا حالا ها جای کار داره تا کدنویسیم به حد قابل قبولی برسه،
در مورد مطلبی که در مورد لایه هاو ترکیب UIو DAL گفتید ممکنه بیشتر توضیح بدید؟
اینطوری نوشتن کد چه تغییری می کنه ؟
با سپاس وبا آرزوی موفقیت


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

مثلا، برای نوشتن یک شرط ساده در C/CPP:


if(a == NULL)خیلیها برعکس اینو مینویسن:


if(NULL== a)شاید مدتها زمان ببره تا متوجه بشید چه تفاوتی بین این دو خط هستش، اما فقط به شرطیکه کدهای برنامه نویسان خوب دنیا رو زیاد بخونید و همواره به جزییات توجه کرده و در اونها کنکاش کنید. از چنین چیز ساده ای بگیرید، تا مسائل مربوط به الگوها و ...

اما همه اینها در مرحله دوم مطرح میشن. مرحله اول، شناخت صحیح محیطی هستش که میخواهید براش کد بنویسید. مثلا برای Windows Application ها، باید جزییات نحوه کارکرد سیستم عامل ویندوز رو بدونید، و بدونید وقتی end-user مثلا Mouse رو از روی یک Window به روی یک Window دیگه میبره، چه اتفاقی در سیستم عامل میفته...

هر دو این مراحلی که گفتم، وقتی میسر میشن که مرحله صفر رو بهش جامه عمل بپوشونید. این مرحله چیه؟ تقویت زبان انگلیسی. تا وقتی دنبال Reference های فارسی باشید، و مدام بخواهید به زبان فارسی مطلب بخونید و یاد بگیرید، هرگز به مرحله اول و دوم نخواهید رسید. این یه واقعیته، که ما استفاده کننده تکنولوژیها هستیم، نه مخترع و ابداع کننده اونها. در نتیجه، هیچوقت نمیتونید انتظار داشته باشید که کتابی که Charles Petzold تالیف میکنه با کتاب رانکوهی، جعفر نژاد قمی و ... یکی باشن. پس از مرحله صفر شروع کنید.

Bahar_HS
پنج شنبه 21 شهریور 1387, 15:56 عصر
با سلام
از راهنمایی تون سپاسگزارم،
مرحله ی صفر ممکنه خیلی وقت ببره ولی بالاخره می تونم امیدوار باشم که یه روزی به مرحله ی اول برسم و بعد دوم و.....


با سپاس وباآرزوی موفقیت