PDA

View Full Version : حرفه ای: بهترین روش برای واردکردن اطلاعات در چندین جدول اکسس همزمان



حسین.کاظمی
جمعه 12 شهریور 1395, 19:11 عصر
با سلام به همگی
دوستان من خیلی وقته با اکسس کار نکردم حالا یه مشکلی دارم میشه راهنماییم کنید؟؟؟

مشکل: میخام توسط یک باتن اطلاعاتی که کاربر وارد چندین تکست باکس کرده است را وارد چندین جدول اکسس کنم حالا بهترین روش برای درج اطلاعات در چندین جدول چیه که نخام هی کانکشن را باز کنم و ببندم؟؟؟

daniyaltjm
جمعه 12 شهریور 1395, 20:06 عصر
با سلام به همگی
دوستان من خیلی وقته با اکسس کار نکردم حالا یه مشکلی دارم میشه راهنماییم کنید؟؟؟

مشکل: میخام توسط یک باتن اطلاعاتی که کاربر وارد چندین تکست باکس کرده است را وارد چندین جدول اکسس کنم حالا بهترین روش برای درج اطلاعات در چندین جدول چیه که نخام هی کانکشن را باز کنم و ببندم؟؟؟


سلام من فکر نکنم که احتیاج به باز کردن چند کانکشن باشه! کانکشن میاد ارتباط با دیتا بیس رو برقرار میکنه و وقتی بازش کردی میتونی عملیات Insert یا هر چیز رو انجام بدی و در آخر کانکشن رو ببندی اینطوری:


SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=True");
SqlCommand cm = new SqlCommand();
con.Open();
cm.CommandText = "دستور اول";
cm.ExecuteNonQuery();
cm.CommandText = "دستور دوم";
cm.ExecuteNonQuery();
con.Close();

حسین.کاظمی
جمعه 12 شهریور 1395, 20:35 عصر
این خطا را داد


142367

با اس کیو ال جواب میده ولی با اکسس فک نکنم

c0mmander
جمعه 12 شهریور 1395, 20:36 عصر
از using در دستوراتت استفاده کن.

به عنوان مثال:


using (SqlConnection con = new SqlConnection(conString))
{
con.Open();
using (SqlCommand cm = new SqlCommand("دستورات" , con))
{
}
using (SqlCommand cm = new SqlCommand("دستورات", con))
{
}
}

mr.sirwan
جمعه 12 شهریور 1395, 20:39 عصر
این خطا را داد


142367

با اس کیو ال جواب میده ولی با اکسس فک نکنم

این خط رو بعد از ساختن ابجکت cm اضافه کنین:
cm.Connection=con;

حسین.کاظمی
جمعه 12 شهریور 1395, 20:40 عصر
از using در دستوراتت استفاده کن.

میشه بیشتر توضیح بدید دوست عزیز

c0mmander
جمعه 12 شهریور 1395, 20:41 عصر
میشه بیشتر توضیح بدید دوست عزیز

مثل اینکه کد ها داخل پست قبلی نیومده بود ویرایش کردم

c0mmander
جمعه 12 شهریور 1395, 20:44 عصر
میشه بیشتر توضیح بدید دوست عزیز

مثل اینکه کد ها داخل پست قبلی نیومده بود ویرایش کردم

اما اون ارور برای این هست که کانکشنتون رو در SqlCommand در نظر نگرفته بودید کدی که من دادم برای بهینه سازی بود.

حسین.کاظمی
جمعه 12 شهریور 1395, 20:49 عصر
این خط رو بعد از ساختن ابجکت cm اضافه کنین:
cm.Connection=con;



بی فایده بود دوست عزیز....
ولی بازم ممنون که جواب دادید

mr.sirwan
جمعه 12 شهریور 1395, 20:50 عصر
بی فایده بود دوست عزیز....
ولی بازم ممنون که جواب دادید

:متعجب::متعجب::متعجب::متعجب: یعنی بازم همین ارور رو داد؟؟؟؟!!!!!!

حسین.کاظمی
جمعه 12 شهریور 1395, 21:06 عصر
اره همین خطا را داد:گریه::گریه:

حسین.کاظمی
جمعه 12 شهریور 1395, 21:13 عصر
از using در دستوراتت استفاده کن.

به عنوان مثال:


using (SqlConnection con = new SqlConnection(conString))
{
con.Open();
using (SqlCommand cm = new SqlCommand("دستورات" , con))
{
}
using (SqlCommand cm = new SqlCommand("دستورات", con))
{
}
}




دوست عزیز روش شما ببین درست نوشتم


using ( ocn = new OleDbConnection(ConnectionString))
{
ocn.Open();

using (ocm = new OleDbCommand("insert into tbl_OnvanShoghl(ID, Onvan_Shoghl)VALUES(" + txt_idonvanshoqli.Text + ",'" + txt_invanshoqli.Text + "')", ocn))
{ }
using (ocm = new OleDbCommand("insert into tbl_Qesmat (Qesmat,id_onvan)VALUES('" + txt_qesmat.Text + "', " + txt_idqesmat.Text + ")", ocn))
{ }
using (ocm = new OleDbCommand("insert into tbl_subqesmat(sub_qesmat,id_qesmat)VALUES('" + txt_subqesmat.Text + "', " + id_subqesmat.Text + ")", ocn))
{ }
ocm.ExecuteNonQuery();
ocn.Close();

}

mr.sirwan
جمعه 12 شهریور 1395, 21:21 عصر
اره همین خطا را داد:گریه::گریه:

اگه دقیق خاطرم باشم واسه دیتابیس اکسس از دستوراتی که پیشوند SQL دارند استفاده نمیکنیم، بلکه از دستورات با پیشوند OleDb استفاده میکنیم، همینطور کانکشن استرینگ هم به احتمال زیاد باید تفاوت داشته باشه
همون خط کدارو به اینصورت ویرایش کنین:


OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.;Initial Catalog=Test;Integrated Security=True");
OleDbCommand cm = new OleDbCommand();
con.Open();
cmd.Connection = con;
cm.CommandText = "دستور اول";
cm.ExecuteNonQuery();
cm.CommandText = "دستور دوم";
cm.ExecuteNonQuery();
con.Close();

mr.sirwan
جمعه 12 شهریور 1395, 21:39 عصر
دوست عزیز روش شما ببین درست نوشتم


using ( ocn = new OleDbConnection(ConnectionString))
{
ocn.Open();

using (ocm = new OleDbCommand("insert into tbl_OnvanShoghl(ID, Onvan_Shoghl)VALUES(" + txt_idonvanshoqli.Text + ",'" + txt_invanshoqli.Text + "')", ocn))
{ }
using (ocm = new OleDbCommand("insert into tbl_Qesmat (Qesmat,id_onvan)VALUES('" + txt_qesmat.Text + "', " + txt_idqesmat.Text + ")", ocn))
{ }
using (ocm = new OleDbCommand("insert into tbl_subqesmat(sub_qesmat,id_qesmat)VALUES('" + txt_subqesmat.Text + "', " + id_subqesmat.Text + ")", ocn))
{ }
ocm.ExecuteNonQuery();
ocn.Close();

}




با اجازه دوست خوبمون من جواب میدم، خیر شما باید به ازای هر using مربوط به command یک دستور ExecuteNonQuery هم داشته باشین، بدین صورت:


using (ocm = new OleDbCommand("insert into tbl_OnvanShoghl(ID, Onvan_Shoghl)VALUES(" + txt_idonvanshoqli.Text + ",'" + txt_invanshoqli.Text + "')", ocn)) {
ocm.ExecuteNonQuery();
}

using (ocm = new OleDbCommand("insert into tbl_Qesmat (Qesmat,id_onvan)VALUES('" + txt_qesmat.Text + "', " + txt_idqesmat.Text + ")", ocn))

{
ocm.ExecuteNonQuery();
}

using (ocm = new OleDbCommand("insert into tbl_subqesmat(sub_qesmat,id_qesmat)VALUES('" + txt_subqesmat.Text + "', " + id_subqesmat.Text + ")", ocn))

{
ocm.ExecuteNonQuery();
}



ocn.Close();