PDA

View Full Version : مشکل با datareder در استفاده از Background worker



nafisehk
چهارشنبه 08 آبان 1392, 10:04 صبح
سلام
برای بالا بردن سرعت لود یکی از فرمهام که یه کامبو با تعداد زیادی داده داره از bakgroundworker استفاده کردم
اصلا تو پروژو Datareader ندارم اررور میده که 1 کانکش باز datareader وجود داره که باید بسته شه.:افسرده:

ممنون میشم راهنماییم کنید

veniz2008
چهارشنبه 08 آبان 1392, 10:36 صبح
سلام
برای بالا بردن سرعت لود یکی از فرمهام که یه کامبو با تعداد زیادی داده داره از bakgroundworker استفاده کردم
سلام.
backgroundworker یکی از روش های برنامه نویسی همزمان هست و باعث روان سازی اجرای کدها و فرآیندهای سنگین میشه نه افزایش سرعت. در واقع اون بخش از کدهای شما که داخل backgroundworker قرار میگیره، در یک thread جداگانه اجرا میشه. به همین خاطر برنامه شما قفل نمیکنه.

اصلا تو پروژو Datareader ندارم اررور میده که 1 کانکش باز datareader وجود داره که باید بسته شه.:افسرده:

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

nafisehk
چهارشنبه 08 آبان 1392, 10:53 صبح
سلام.
backgroundworker یکی از روش های برنامه نویسی همزمان هست و باعث روان سازی اجرای کدها و فرآیندهای سنگین میشه نه افزایش سرعت. در واقع اون بخش از کدهای شما که داخل backgroundworker قرار میگیره، در یک thread جداگانه اجرا میشه. به همین خاطر برنامه شما قفل نمیکنه.

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

ممنون veniz2008 عزیز
من فقط دستور fill(datatabl استفاده کردم که نیازی به باز وبسته کردن کانکشن نداره. این ارور فقط تو فرمی رخ میده که backgroundworker داره برا همین فکر کردم ممکنه مشکل از bgw باشه..

There is already an open DataReader associated with this Command which must be closed first.

تو پروژم اصلا sqldatareader ندارم

قبلاز Fill کردن میگه(:لبخندساده:):the proces or thread has change since last step

nafisehk
چهارشنبه 08 آبان 1392, 11:22 صبح
دوستان لطفا راهنمایی کنید

nafisehk
چهارشنبه 08 آبان 1392, 12:08 عصر
ui


private void frmContact_Load(object sender, EventArgs e)
{
//****Background Worker*******//
this.Cursor = Cursors.WaitCursor;
backgroundWorker1.RunWorkerAsync();
//****************************//
bindingSourceGroups.DataSource = Logic.PhoneBook.ReadGroupsName();
txtcntName.Visible = true;
txtcntFirstName.Visible = false;
txtcntLastName.Visible = false;
myDataTableGroups.Columns.Add("UsrID", typeof(Int32));
myDataTableGroups.Columns.Add("Usrname", typeof(string));

//Fill ContactType ComboBox
var comboItem = new List<ComboItem>();
comboItem.Add(new ComboItem() { DisplayMember = "آقا", ValueMember = "0" });
comboItem.Add(new ComboItem() { DisplayMember = "خانم", ValueMember = "1" });
comboItem.Add(new ComboItem() { DisplayMember = "شخص حقوقی", ValueMember = "2" });
cmbcntType.DataSource = comboItem;
cmbcntType.DisplayMember = "DisplayMember";
cmbcntType.ValueMember = "ValueMember";
cmbcntType.SelectedValue = 0;
cmbParentCompanies.SelectedIndex = -1;
 
if (Logic.Contact.Edit == true)
{
string ContactType = Logic.Contact.cntType;
if (ContactType != null)
{
if (ContactType == "MN")
{
cmbcntType.SelectedValue = "0";
txtcntFirstName.Visible = true;
txtcntLastName.Visible = true;
txtcntName.Visible = false;
}
else if (ContactType == "WN")
{
cmbcntType.SelectedValue = "1";
txtcntFirstName.Visible = true;
txtcntLastName.Visible = true;
txtcntName.Visible = false;
}
else
{
cmbcntType.SelectedValue = "2";
txtcntFirstName.Visible = false;
txtcntLastName.Visible = false;
txtcntName.Visible = true;
txtcntName.Text = frmMainPhoneBook.a;
}
if (Logic.Contact.Edit == true)
{
#region Bind Edit info To Controls
txtcntFirstName.Text = Logic.Contact.cntFirstName;
txtcntLastName.Text = Logic.Contact.cntLastName;
txtcntName.Text = Logic.Contact.cntName;
txtcntRole.Text = Logic.Contact.cntRole;
txtcntAddress.Text = Logic.Contact.cntAddress;
txtcntDescription.Text = Logic.Contact.cntDescription;
txtcntEmail.Text = Logic.Contact.cntEmail;
txtcntFaxNumber.Text = Logic.Contact.cntFaxNumber;
txtcntWebSite.Text = Logic.Contact.cntwebSite;
#endregion
cmbParentCompanies.SelectedValue = frmMainPhoneBook.cntCompanyCntID;
bindingSourceTellNumbers.DataSource = frmContactTellNumber.myDataTable1;
foreach (DataRow ItemDataTableMembership in frmMainPhoneBook.myDataTableMembership.Rows)
{
foreach (DataGridViewRow ItemdgvGroups in dgvGroups.Rows)
{
if (ItemDataTableMembership["GroupUserID"].ToString() == ItemdgvGroups.Cells[2].Value.ToString())
{
ItemdgvGroups.Cells[0].Value = true;
break;
}
}
}
}
}
}
}

nafisehk
چهارشنبه 08 آبان 1392, 12:09 عصر
لایه دیتابیس


publicstaticDataTable ExecuteReadQuery(string sql)
{
mySqlCommand.Parameters.Clear();
mySqlCommand.CommandType = CommandType.Text;
mySqlCommand.CommandText = sql;
DataTable myDataTable = newDataTable();
mysqlDataAdapter.Fill(myDataTable);
return myDataTable;
}

nafisehk
چهارشنبه 08 آبان 1392, 12:36 عصر
لایه access


public static DataTable ReadParentCompanies()
{
Query = " select cntID,cntName from ContactInfo where \n"
+ " (cntCompanyCntID='-1' OR cntCompanyCntID='-2') \n"
+ " and cntType='CO' \n"
+ " and RecordDeleted!=1 \n"
+ " order by cntName asc";
MyDataTable = DataBase.Execute.ExecuteReadQuery(Query);
return MyDataTable;
}

nafisehk
چهارشنبه 08 آبان 1392, 12:49 عصر
اینکه تو لود فرم ایندکس کامبویی که با بکگراند ورکر پر میشه رو تغییر میدم مشکل ایجاد نمیکنه؟

nafisehk
چهارشنبه 08 آبان 1392, 13:56 عصر
فهمیدم مشکلش کجاست
اینکه یه دیتاتیبل دیگه رو هم تو فرم لود پر میکنه اما اینکه چه ربطی داره رو نمیدونم....