PDA

View Full Version : مشکل در وارد کردن اطلاعات در DB



Metaldevil
شنبه 07 دی 1387, 15:48 عصر
سلام به همه دوستان راستشو بخواهین من تو سی شارپ تازه کارم و باید یه پروژه با سی شارپ بنویسم حالا تو وارد کردن اطلاعاتم تو DB دچار مشکل شدم ممنون می شم کمکم کنین.

dark-man
شنبه 07 دی 1387, 17:04 عصر
سلام . من برنامت رو دیدم . برنامه رو خیلی شلوغ کد نویسی کردی باعث سردرگمیت شده حتی من هم گیج شدم . یه نمونه کد میذارم امیدوارم به دردت بخوره




try
{
sqlconnection xConn = new sqlconnection();
xConn.connectionstring = " COnnection String";
sqlcommand xCmd = new sqlcommand();
xCmd.connection = xConn;
xCmd.commandtext = " Select or insert or update or delete";
xCmd.parameters.addwithvalue("@parameter", textbox1.text);
xConn.open();
int xRowUpdate = xCmd.executenonequery();
xConn.close();
}
catch(sqlexeption ex)
{
messagebox.show(ex.message);
}



مورد بعد اینکه نیاز نیست برای هر textbox یه متغیر تعریف کنی کافیه همون textbox رو مستقیم به پارامتر نسبت بدی . اگه کمی تمیز تر کد بنویسی بهتره
امیدوارم این بتونه کمکت کنه:لبخندساده:

Metaldevil
شنبه 07 دی 1387, 21:52 عصر
سلام
من کد رو اون طوری که شما گفتین تغییر دادم ولی... بازم کار نکرد. میشه بازم راهنماییم کنین؟

dark-man
یک شنبه 08 دی 1387, 09:26 صبح
سلام
من کد رو اون طوری که شما گفتین تغییر دادم ولی... بازم کار نکرد. میشه بازم راهنماییم کنین؟

شما تو برنامت یه فرم داری به اسم frmPatient که دیتا بیس رو بروز update میکنه . اولا" تو commandtextیه اشتباه داری وقتی می خوای فیلدهای جدولی رو بروز رسانی کنی که قبلا" توش مقدار بوده باید id اون رکورد رو برای بروز رسانی داشته باشی که اینجا شما id رو ندادی و به اشکال بر می خوری باید id v, داشته باشی و طبق کد زیر



where id = @id


یک پارامتر برای id به دیتابیس پاس بدی تا اطلاعات دقیقا" روی همون رکورد بشینه این در صورتیه که شما بخوای update کنی . یک مسئله که دقت نکردی این بود که گفتم می تونی به پارامترها مقدار مستقیم بدی و متغیر تعریف نکنی اما شما این کار رو کردی متغیر اضافه تعریف کردن = هدر رفتن فضای حافظه و اشکال در برنامه پس اگه بخوای کمی اصولی تر کار کنی می تونی textbox ها رو مستقیما" به پارامتر ها نسبت بدی مثلا"



cmd.parameters.addwithvalue("@xpar", textbox1.text);


نکته بعدی هم اینکه برای راحتی و اطمینان کار سعی کن sqlconnection و sqlcommand و بقیه کدهای مربوطه رو توی همون رویداد کلیلک بنویسی و داخل try و catch بذاری تا بتونی خطا ها رو مدیریت کنی . پشنهاد می کنم از اسمهای طولانی استفاده نکنی . اسم متغیر ها و نمونه ها فقط قراردادی بین شما و محیط برنامه نویسی هست پس اسامی انتخاب کن که هم کوتاه و هم گویا باشه اینجوری یکی مثل من هم گیج نمیشه:چشمک::بامزه: . بازهم تاکید می کنم کمی تمیز تر و مرتب تر کد بنویسی تا سردرگم نشی بعدا" :لبخندساده:. یه نمونه از update رو برات مینویسم شاید کمکت کنه :




try
{
SqlConnection exConn = new SqlConnection();
exConn.ConnectionString = "";
SqlCommand exCmd = new SqlCommand();
exCmd.Connection = exConn;
exCmd.CommandText = "update tb_sample set xfield = @xpar, yfield = @ypar where xid = @xid";
exCmd.Parameters.AddWithValue("@xpar", textbox1.text);
exCmd.Parameters.AddWithValue("@ypar", textbox2.text);
exConn.Open();
int x = exCmd.ExecuteNoneQuery();
exConn.Close();
}
catch(SqlExeption ex)
{
MessageBox.Show(ex.Message);
}


یک پیشنهاد دیگه هم اینکه سعی کن برای commandtextها از Store Proccudre در sql استفاده کنی .
امیدوارم این روش کمکت کنه :لبخندساده: