PDA

View Full Version : مبتدی: ویرایش اطلاعات ثبت شده در دیتابیس



messi13
چهارشنبه 16 مرداد 1392, 02:56 صبح
سلام..
من تو ادیت اطلاعات زمانی که مثلاً یه جایی می خوام شمارههائی رو اتومات بزنه مشکل دارم.یعنی کاربر وارد نکنه . زمانی که مثلا ID رو (به فرض شماره سرویس) رو دستی وارد میکردم مشکلی واسه ویرایش ندارم..
به عکس دقت کنید
108665

الان که عدد ID دستم نیست تو UpdateQuery در DataDet هم ویرایش رو براساس اینکه باید ID رو وارد کنید گذاشتم اینم کداش..



UPDATE [dbo].[Tbl_ajance] SET [Name_ajance] = @Name_ajance, [Admin_ajance] = @Admin_ajance, [Adress] = @Adress, [Tel1] = @Tel1, [Tel2] = @Tel2
WHERE ([ID] = @Original_ID);
SELECT ID, Name_ajance, Admin_ajance, Adress, Tel1, Tel2 FROM Tbl_ajance
WHERE (ID = @ID)



الان این کد رو چجوری واردکنم که سیستم خطا نگیره
این کد ویرایشه:


MoshtarakDataSetTableAdapters.Tbl_ajanceTableAdapt er ajc = new MoshtarakDataSetTableAdapters.Tbl_ajanceTableAdapt er();
tbl_ajanceTableAdapter1.UpdateQuery(؟؟؟؟؟؟؟ ؟؟؟؟)


اینم اسم تکست باکس:
(txt_name_ajance, txt_name_modir, txt_adress, txt_tel1 txt_Tel2)
txt_id هم برای واردکردن شماره اتومات گذاشتم رو فرم زمانی که بخوام ویرایش کنم
اینم کد insert:جهت اطلاع



MoshtarakDataSetTableAdapters.Tbl_ajanceTableAdapt er ajc = new MoshtarakDataSetTableAdapters.Tbl_ajanceTableAdapt er();
tbl_ajanceTableAdapter1.InsertQuery(txt_name_ajanc e.Text, txt_name_modir.Text, txt_adress.Text, txt_tel1.Text, txt_Tel2.Text);

khokhan
چهارشنبه 16 مرداد 1392, 09:01 صبح
لازم نیست آی دی رو دستی وارد کنی
اگه توی فرمت دیتا گرید داری با استفاده از اندیس سطر انتخابی آی دی رو می تونی خیلی راحت واکشی کنی

int ID = Convert.ToInt16(dataGridView1.SelectedRows[0].Cells[0].Value);
بعد به اون آی دی که بدست آوردی اشاره کنی

MoshtarakDataSetTableAdapters.Tbl_ajanceTableAdapt er ajc = new MoshtarakDataSetTableAdapters.Tbl_ajanceTableAdapt er();
tbl_ajanceTableAdapter1.UpdateQuery(ID)

messi13
چهارشنبه 16 مرداد 1392, 12:10 عصر
لازم نیست آی دی رو دستی وارد کنی
اگه توی فرمت دیتا گرید داری با استفاده از اندیس سطر انتخابی آی دی رو می تونی خیلی راحت واکشی کنی

int ID = Convert.ToInt16(dataGridView1.SelectedRows[0].Cells[0].Value);
بعد به اون آی دی که بدست آوردی اشاره کنی

MoshtarakDataSetTableAdapters.Tbl_ajanceTableAdapt er ajc = new MoshtarakDataSetTableAdapters.Tbl_ajanceTableAdapt er();
tbl_ajanceTableAdapter1.UpdateQuery(ID)
اره گرید هست تو فرم
بازم خطامیده
نباید کاره دیگه انجام بدم..؟
اون DataSet رو نمیخواد دستکاری بشه؟
اصلا این کدها رو باید تو همین باتن "ثبت" قرار بدم یا یه باتن دیگه به اسم دیگه؟
108674

khokhan
چهارشنبه 16 مرداد 1392, 16:15 عصر
اره گرید هست تو فرم
بازم خطامیده
نباید کاره دیگه انجام بدم..؟
اون DataSet رو نمیخواد دستکاری بشه؟
اصلا این کدها رو باید تو همین باتن "ثبت" قرار بدم یا یه باتن دیگه به اسم دیگه؟
108674

این نمونه با entity Model فکر کنم مشکل شما رو مرتفع کنه حذف و اضافه و ویرایش و فراخوانی همه رو توش گذاشتم

آپدیت با استفاده از دریافت id از ردیف انتخابی گرید هست و البته راههای زیادی برای این منظور هست که یکیش این روشه

messi13
چهارشنبه 16 مرداد 1392, 16:59 عصر
داداش این خطاء مال چیه
مال foreach
108688

khokhan
چهارشنبه 16 مرداد 1392, 17:02 عصر
داداش این خطاء مال چیه
مال foreach

توضیحات مربوط به اون ارور در پایین صفحه چیه :لبخند: اونوارو بگذار " عزیز !!! ما چه علم غیب نداریم "
یا یه ااسکرین شات از کل صفحه بگذار که بالا وپایین کدها معلوم باشه
هرچند احتمالا یه کروشه کم یازیاده

messi13
چهارشنبه 16 مرداد 1392, 17:15 عصر
نه کروشه مشکل ندارند
این توضیح foreach


Error 20 Cannot convert type 'Final.MoshtarakDataSet.Tbl_ajanceRow' to 'Final.Tbl_ajance' C:\Users\AS@L\Documents\Visual Studio 2010\Projects\Final\Final\Form_ajance.cs 69 13 Final

اینم مال دومی



Error 21 'Final.MoshtarakDataSet' does not contain a definition for 'SaveChanges' and no extension method 'SaveChanges' accepting a first argument of type 'Final.MoshtarakDataSet' could be found (are you missing a using directive or an assembly reference?) C:\Users\AS@L\Documents\Visual Studio 2010\Projects\Final\Final\Form_ajance.cs 84 21 Final



108692

messi13
چهارشنبه 16 مرداد 1392, 17:20 عصر
اینم کدها:


private void buttonX2_Click(object sender, EventArgs e)
{


int ID = Convert.ToInt16(dataGridView1.CurrentRow.Cells[0].Value);
MoshtarakDataSet context = new MoshtarakDataSet();



var query = from data in context.Tbl_ajance

orderby data.ID

select data;



foreach (Tbl_ajance details in query)
{

if (details.ID == ID)
{
details.Name_ajance = txt_name_ajance.Text;
details.Admin_ajance = txt_name_modir.Text.ToString();
details.Adress = txt_adress.Text.ToString();
details.Tel1 = txt_tel1.Text.ToString();
details.Tel2 = txt_Tel2.Text.ToString();
details.Adress = txt_adress.Text.ToString();
}

}

context.SaveChanges();
getData();
}

khokhan
چهارشنبه 16 مرداد 1392, 17:24 عصر
نه کروشه مشکل ندارند
این توضیح foreach
اینم مال دومی



108692
برنامه رو با linq نوشتی یا با entity ?????
میتونی یه تصویر از Solution Explorer بگذاری ؟

messi13
چهارشنبه 16 مرداد 1392, 17:29 عصر
با linq می خواستم با entity اجرا کنم کل فرمهام نزدیک 500 خطا داد که بی خیال شدم..

108694

khokhan
چهارشنبه 16 مرداد 1392, 17:33 عصر
با linq می خواستم با entity اجرا کنم کل فرمهام نزدیک 500 خطا داد که بی خیال شدم..



پس با این حساب دستور آپدیتتون بایستی شبیه این باشه


private void button1_Click(object sender, EventArgs e)
{
int ID = Convert.ToInt16(dataGridView1.CurrentRow.Cells[0].Value);
MoshtarakDataSet context = new MoshtarakDataSet();
var matchedCustomer = (from c in context.GetTable<Tbl_ajance>()
where c.id == ID
select c).SingleOrDefault();

Tbl_ajance cust = new Tbl_ajance();
matchedCustomer.Name_ajance = txt_name_ajance.Text;
matchedCustomer.Admin_ajance = txt_name_modir.Text.ToString();
matchedCustomer.Adress = txt_adress.Text.ToString();
matchedCustomer.Tel1 = txt_tel1.Text.ToString();
matchedCustomer.Tel2 = txt_Tel2.Text.ToString();
matchedCustomer.Adress = txt_adress.Text.ToString();



context.SubmitChanges();
}

messi13
چهارشنبه 16 مرداد 1392, 17:48 عصر
تقریبا ولی بیشتر از طریق Detaset کئوری میسازم


108697
و در مرحله ایجاد کیئوری این کدها رو واسه آپدیت میذارم



UPDATE [dbo].[Tbl_ajance] SET [Name_ajance] = @Name_ajance, [Admin_ajance] = @Admin_ajance, [Adress] = @Adress, [Tel1] = @Tel1, [Tel2] = @Tel2 WHERE ((@IsNull_Name_ajance = 1 AND [Name_ajance] IS NULL) OR ([Name_ajance] = @Original_Name_ajance)) AND ((@IsNull_Admin_ajance = 1 AND [Admin_ajance] IS NULL) OR ([Admin_ajance] = @Original_Admin_ajance)) AND ((@IsNull_Adress = 1 AND [Adress] IS NULL) OR ([Adress] = @Original_Adress)) AND ((@IsNull_Tel1 = 1 AND [Tel1] IS NULL) OR ([Tel1] = @Original_Tel1)) AND ((@IsNull_Tel2 = 1 AND [Tel2] IS NULL) OR ([Tel2] = @Original_Tel2)));

SELECT ID, Name_ajance, Admin_ajance, Adress, Tel1, Tel2 FROM Tbl_ajance WHERE (ID = @ID)
وفرمت کلی کدها هم واسه ویرایش به صورت زیر.
البته این کد رو تو این پروژه استفاده نکردم



private void EDIT_Click(object sender, EventArgs e)
{

MoshtarakDataSetTableAdapters.tbl_MoshtarakTableAd apter ajance = new MoshtarakDataSetTableAdapters.tbl_MoshtarakTableAd apter();
try
{
tbl_MoshtarakTableAdapter.UpdateQuery(Convert.ToIn t32(txtcode_mosh.Text), txtname.Text, txtfname.Text, txtaddress.Text, txttel.Text, Convert.ToInt32(txtcode_mosh.Text));

this.tbl_MoshtarakTableAdapter.Fill(this.moshtarak DataSet.tbl_Moshtarak);
MessageBox.Show("اطلاعات با موفقیت ویرایش شد");
}
catch
{
MessageBox.Show("کد مشترک را وارد کنید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}

khokhan
چهارشنبه 16 مرداد 1392, 17:53 عصر
تقریبا ولی بیشتر از طریق Detaset کئوری میسازم
به نظرم توخود فرم این کارو بکنی بهتره
موفق باشی

messi13
چهارشنبه 16 مرداد 1392, 17:58 عصر
پس با این حساب دستور آپدیتتون بایستی شبیه این باشه


private void button1_Click(object sender, EventArgs e)
{
int ID = Convert.ToInt16(dataGridView1.CurrentRow.Cells[0].Value);
MoshtarakDataSet context = new MoshtarakDataSet();
var matchedCustomer = (from c in context.GetTable<Tbl_ajance>()
where c.id == ID
select c).SingleOrDefault();

Tbl_ajance cust = new Tbl_ajance();
matchedCustomer.Name_ajance = txt_name_ajance.Text;
matchedCustomer.Admin_ajance = txt_name_modir.Text.ToString();
matchedCustomer.Adress = txt_adress.Text.ToString();
matchedCustomer.Tel1 = txt_tel1.Text.ToString();
matchedCustomer.Tel2 = txt_Tel2.Text.ToString();
matchedCustomer.Adress = txt_adress.Text.ToString();



context.SubmitChanges();
}


108699
108700

http://barnamenevis.org/images/misc/pencil.png

khokhan
چهارشنبه 16 مرداد 1392, 18:16 عصر
108699
108700

http://barnamenevis.org/images/misc/pencil.png
اون جا که نوشتی :

MoshtarakDataSet context = new MoshtarakDataSet();
عوضش کن اینطوری بنویس :


myDataDataContext context = new myDataDataContext();

khokhan
پنج شنبه 17 مرداد 1392, 03:16 صبح
این هم کدهای ویرایش شما در یه پروژه با linq

messi13
پنج شنبه 17 مرداد 1392, 03:38 صبح
ممنون دقیقا همون کدهاست با تغییرات اندک که دادید
فقط برا ویرایش باید بر روی جدول یا بهتر بگم سطر مربوطه کلیک کنیم بعد تغییرات رو اعمال کنیم..
یه جاهائی که مثلا شماره ها زیاد هستند..بشه تو یه تکست باکس یه سرچ زد یا مثلا شماره رو تو تکس باکس وارد کرد بعد ویرایش انجام بشه..
بالاخره از یه روش جواب گرفتیم..:لبخند:

khokhan
جمعه 18 مرداد 1392, 15:20 عصر
تقریبا ولی بیشتر از طریق Detaset کئوری میسازم


108697
و در مرحله ایجاد کیئوری این کدها رو واسه آپدیت میذارم
وفرمت کلی کدها هم واسه ویرایش به صورت زیر.
البته این کد رو تو این پروژه استفاده نکردم




private void EDIT_Click(object sender, EventArgs e)
{

MoshtarakDataSetTableAdapters.tbl_MoshtarakTableAd apter ajance = new MoshtarakDataSetTableAdapters.tbl_MoshtarakTableAd apter();
try
{
tbl_MoshtarakTableAdapter.UpdateQuery(Convert.ToIn t32(txtcode_mosh.Text), txtname.Text, txtfname.Text, txtaddress.Text, txttel.Text, Convert.ToInt32(txtcode_mosh.Text));

this.tbl_MoshtarakTableAdapter.Fill(this.moshtarak DataSet.tbl_Moshtarak);
MessageBox.Show("اطلاعات با موفقیت ویرایش شد");
}
catch
{
MessageBox.Show("کد مشترک را وارد کنید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}




با سلام
تعداد آرگومان تعریف شده در کوئری داخل دیتاست با تعداد متغیر متناظربا آرگومانها در فرم مربوطه بایستی همخوانی داشته باشند
درضمن برای ویرایش دو عدد فیلد اونهمه کد اضافی لازم نیست تمام چیزی که بایستی در query builder بنویسین اینه :

108812



این هم نمونه برنامه شما با اجرای کوئری در داخل دیتاست همراه باورود داده ، ویرایش داده و حذف داده و کلی مخلفات ذیربط :لبخند:

ایدکم ا.. جمیعا