الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ظهور خطأ عند جلب البيانات الى الصفحة

بدأه ماكسيموس في 15 أكتوبر 2008 · 1 رد · 764 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

يوجد لدي خطأ في أحدى الصفحات في المشروع الذي اعمل عليه

والمشروع هو عبارة عن جلب البيانات من قاعدة البيانات

ووضعها في فورم معين ومن ثم ارسالها بالبريد الالكتروني

ولكن قبل عملية الارسال تحدث المشكلة وهي كالتالي :

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

حاولت التحايل على البرنامج ولكن محاولاتي للاسف لم تنجح . ولا اعرف مكان الخطأ بالضبط

وهذا هو الكوود

public void InformPiByEmail()
	{

		SqlCommand co = new SqlCommand();
		co.CommandText = "Select AName from Experts1 where UserId = '3bf8af7c-e295-4e1a-8416-cc6a3810f65e'";
		co.CommandType = CommandType.Text;
		co.Connection = sqlConnRos;

		co.ExecuteReader(CommandBehavior.CloseConnection);


//ارسال رسالة الى المختص تحتوي على بيانات الباحث التي قام بتسجيلها وذلك للتأكد من صحة البيانات
		string SmailInfo = "<html ><head><meta http-equiv='Content-Type' content='text/html; charset=windows-1252'><title>مقترح بحثي جديد</title></head><body>";
		SmailInfo += "<table align='center' width='80%' border='2' dir='rtl'>";
		SmailInfo += "<tr><td>البرنامج</td><td>" + ddlPrograms.SelectedItem  + "</td></tr>";
		SmailInfo += "<tr><td>الاولوية البحثية</td><td>" + GridView1.SelectedValue  + "</td></tr>";
		SmailInfo += "<tr><td>عدد المشاركين</td><td>" + Table1.ID   + "</td></tr>";
		SmailInfo += "<tr><td>أسماء الباحثين المشاركين</td><td>" + txtCoiList.Text + "</td></tr>";
		SmailInfo += "<tr><td>رقم المقترح البحثي</td><td>" + txtProposalNo .Text + "</td></tr>";
		SmailInfo += "<tr><td>عنوان المقترح البحثي باللغة العربية</td><td>" + txtATitle.Text + "</td></tr>";
		SmailInfo += "<tr><td>عنوان المقترح البحثي باللغة الانجليزية</td><td>" + txtETitle.Text + "</td></tr>";
		SmailInfo += "<tr><td>مجال المقترح البحثي</td><td>" + ddlFields.SelectedItem	+ "</td></tr>";
		SmailInfo += "<tr><td>المجال الدقيق للمقترح البحثي</td><td>" + ddlSubFields.SelectedItem	 + "</td></tr>";
		SmailInfo += "<tr><td>الكلمات الدالة للمقترح البحثي باللغة العربية</td><td>" + txtAKeywords.Text  + "</td></tr>";
		SmailInfo += "<tr><td>الكلمات الدالة للمقتترح البحثي باللغة الانجليزية</td><td>" + txtEKeywords.Text + "</td></tr>";
		SmailInfo += "<tr><td>ملخص البحث باللغة العربية</td><td>" + txtASummary.Text  + "</td></tr>";
		SmailInfo += "<tr><td>ملخص البحث باللغة الانجليزية</td><td>" + txtESummary.Text + "</td></tr>";
		SmailInfo += "<tr><td>الميزانية المطلوبة</td><td>" + txtBudget.Text + "</td></tr>";
		SmailInfo += "<tr><td>مدة التنفيذ بالأشهر</td><td>" + txtDuration.Text + "</td></tr>";
		SmailInfo += "<tr><td>رقم الباحث الرئيس</td><td>" + txtPICode.Text + "</td></tr>";
		SmailInfo += "<tr><td>رقم الأولوية إن وجدت</td><td>" + txtPriorityNo.Text + "</td></tr>";
		SmailInfo += "<tr><td>رقم المقترح البحثي في حال تقديمه من قبل للمدينة</td><td>" + txtOldProposalNo.Text + "</td></tr>";
		SmailInfo += "<tr><td>جهات أخرى تم تقديم المقترح لها من قبل</td><td>" + txtOtherInstitutes.Text + "</td></tr>";
		SmailInfo += "<tr><td>الجهات المتوقع استفادتها من نتائج البحث</td><td>" + txtBenefitingInstitutes.Text + "</td></tr>";
		SmailInfo += "<tr><td>الجهة المقدمة للبحث باللغة العربية</td><td>" + txtAInstitute.Text + "</td></tr>";
		SmailInfo += "<tr><td>الجهة المقدمة للبحث باللغة الانجليزية</td><td>" + txtEInstitute.Text + "</td></tr>";
		SmailInfo += "<tr><td>الكلية / الإدارة باللغة العربية</td><td>" + txtACollege.Text + "</td></tr>";
		SmailInfo += "<tr><td>الكلية / الإدارة باللغة الانجليزية</td><td>" + txtECollege.Text + "</td></tr>";
		SmailInfo += "<tr><td>القسم باللغة العربية</td><td>" + txtADepartment.Text + "</td></tr>";
		SmailInfo += "<tr><td>القسم باللغة الانجليزية</td><td>" + txtEDepartment.Text + "</td></tr>";
		SmailInfo += "<tr><td>ص.ب</td><td>" + txtPOBox.Text + "</td></tr>";
		SmailInfo += "<tr><td>المدينة باللغة العربية</td><td>" + txtACity.Text + "</td></tr>";
		SmailInfo += "<tr><td>المدينة باللغة الانجليزية</td><td>" + txtECity.Text + "</td></tr>";
		SmailInfo += "<tr><td>الرمز البريدي</td><td>" + txtPostalCode.Text + "</td></tr>";
		SmailInfo += "<tr><td>درجة الرسالة</td><td>" + ddlThesisDegree.SelectedValue  + "</td></tr>";
		SmailInfo += "<tr><td>تاريخ الالتحاق بالبرنامج الدراسي</td><td>" + txtEnrolmentDate.Text + "</td></tr>";
		SmailInfo += "<tr><td>طبيعة التفرغ</td><td>" + ddlThesisType.SelectedValue  + "</td></tr>";
		SmailInfo += "<tr><td>الملف</td><td>" + FileUploadProposal.FileName  + "</td></tr>";
		SmailInfo += "</table></body></html>";

		MailMessage SmailAdmin = new MailMessage("gdrgp@kacst.edu.sa", "thawawi@kacst.edu.sa", "متقرح بحثي جديد", SmailInfo);
		//Smail.BodyEncoding = System.Text.Encoding.GetEncoding("windows-1256");
		SmailAdmin.Body = SmailInfo;
		SmailAdmin.IsBodyHtml = true;
		SmtpClient _stmp = new SmtpClient("smtp.kacst.edu.sa");
		_stmp.Send(SmailAdmin);

 }

	public string getNewProposalNo(string ProgramCode)
	{

		string _str = "1";

		sqlCmd = new SqlCommand();
		sqlCmd.CommandText = "SELECT (COUNT(*)+1) AS NewProposalNo FROM Proposals WHERE ProposalNo LIKE '" + ProgramCode + "%' ";
		sqlCmd.CommandType = CommandType.Text;
		sqlCmd.Connection = sqlConnRos;

		if (sqlCmd.Connection.State != ConnectionState.Open)
			sqlCmd.Connection.Open();

		sqlDr = sqlCmd.ExecuteReader();
		sqlDr.Read(); 
		_str = sqlDr[0].ToString();

		sqlDr.Close();

		sqlDr.Dispose();
		sqlCmd.Dispose();

		return "-" + String.Format("{0:D4}", Convert.ToInt32(_str));
	}

	public string getProposalTitle(string ProposalNo)
	{

		string _str = "1";

		sqlCmd = new SqlCommand();
		sqlCmd.CommandText = "SELECT ATitle FROM Proposals WHERE ProposalNo = '" + ProposalNo + "' ";
		sqlCmd.CommandType = CommandType.Text;
		sqlCmd.Connection = sqlConnRos;

		if (sqlCmd.Connection.State != ConnectionState.Open)
			sqlCmd.Connection.Open();


		sqlDr = sqlCmd.ExecuteReader();
		sqlDr.Read();
		if (sqlDr.HasRows)
		{
			_str = sqlDr[0].ToString();
		}

		sqlDr.Close();

		sqlDr.Dispose();
		sqlCmd.Dispose();

		return _str;
	}

	public int getNoOfExpertPropposals(string ProgramCode)
	{
		int i = 0;

		sqlCmd = new SqlCommand();
		sqlCmd.CommandText = "SELECT (COUNT(*)) AS NoOfExpertPropposals FROM Proposals WHERE ProposalNo LIKE '" + ProgramCode + "%' AND CONVERT(varchar, PICode) = '" + User.Identity.Name + "'";
		sqlCmd.CommandType = CommandType.Text;
		sqlCmd.Connection = sqlConnRos;

		if (sqlCmd.Connection.State != ConnectionState.Open)
			sqlCmd.Connection.Open();

		sqlDr = sqlCmd.ExecuteReader();
		sqlDr.Read();

		i = Convert.ToInt32(sqlDr[0]);

		sqlDr.Close();

		sqlDr.Dispose();
		sqlCmd.Dispose();

		return i;
	}

	public string getExpertName()
	{

		string _str = "غير مسجل";

		sqlCmd = new SqlCommand();
		sqlCmd.CommandText = "SELECT AName FROM Experts WHERE PersonID = '" + User.Identity.Name + "' ";
		sqlCmd.CommandType = CommandType.Text;
		sqlCmd.Connection = sqlConnRos;

		if (sqlCmd.Connection.State != ConnectionState.Open)
			sqlCmd.Connection.Open();

		sqlDr = sqlCmd.ExecuteReader();
		sqlDr.Read(); 
		_str = sqlDr.ToString();//Error

		sqlDr.Close();

		sqlDr.Dispose();
		sqlCmd.Dispose();

		return _str;
	}

	public string getPriorityTitle(bool PriorityNoStatus)
	{

		string _str = "";
		if (!PriorityNoStatus)
		{
			sqlCmd = new SqlCommand();
			sqlCmd.CommandText = "SELECT Title FROM FinalPriorities WHERE ID = '" + txtPriorityNo.Text + "' ";
			sqlCmd.CommandType = CommandType.Text;
			sqlCmd.Connection = sqlConnRos;

			if (sqlCmd.Connection.State != ConnectionState.Open)
				sqlCmd.Connection.Open();

			sqlDr = sqlCmd.ExecuteReader();
			sqlDr.Read(); 
			_str = sqlDr[0].ToString();//Error

			sqlDr.Close();

			sqlDr.Dispose();
			sqlCmd.Dispose();
		}
		return _str;
	}

	public string getFieldName(int FieldID)
	{
		string _str = "";
		sqlCmd = new SqlCommand();
		sqlCmd.CommandText = "SELECT AName FROM Fields WHERE ID = '" + FieldID + "' ";
		sqlCmd.CommandType = CommandType.Text;
		sqlCmd.Connection = sqlConnRos;

		if (sqlCmd.Connection.State != ConnectionState.Open)
			sqlCmd.Connection.Open();

		sqlDr = sqlCmd.ExecuteReader();
		sqlDr.Read(); 
		_str = sqlDr[0].ToString();

		sqlDr.Close();

		sqlDr.Dispose();
		sqlCmd.Dispose();

		return _str;
	}

	public string getSubFieldName(int SubFieldID, int FieldID)
	{

		string _str = "";
		sqlCmd = new SqlCommand();
		sqlCmd.CommandText = "SELECT AName FROM SubFields WHERE ID = '" + SubFieldID + "' AND ParentFieldID='" + FieldID + "'";
		sqlCmd.CommandType = CommandType.Text;
		sqlCmd.Connection = sqlConnRos;

		if (sqlCmd.Connection.State != ConnectionState.Open)
			sqlCmd.Connection.Open();

		sqlDr = sqlCmd.ExecuteReader();
		sqlDr.Read();

		if (sqlDr.HasRows)
		{
			_str = sqlDr[0].ToString();
		}

		sqlDr.Close();

		sqlDr.Dispose();
		sqlCmd.Dispose();

		return _str;
	}

	public string getThesisDegreeTitle(bool ThesisDegreeStatus)
	{

		string _str = "";

		if (!ThesisDegreeStatus)
		{
			switch (ddlThesisDegree.SelectedValue)
			{
				case "Msc":
					_str = "ماجستير";
					break;
				case "Ph.D":
					_str = "دكتوراه";
					break;
				default:
					_str = "";
					break;
			}
		}

		return _str;
	}

	public string getThesisTypeTitle(bool ThesisTypestatus)
	{

		string _str = "";

		if (!ThesisTypestatus)
		{
			switch (ddlThesisType.SelectedValue)
			{
				case "P":
					_str = "تفرغ جزئي";
					break;
				case "F":
					_str = "تفرغ كلي";
					break;
				default:
					_str = "";
					break;
			}
		}

		return _str;
	}
}

واذا قام compile بعمله فانه يظهر لي ان الخطأ في هذه الأسطر

sqlCmd.Connection.Open();
sqlDr = sqlCmd.ExecuteReader();
sqlDr.Read(); 
_str = sqlDr[0].ToString();

اتمنى من لديه الحل ان لا يبخل به

تحياتي للجميع

#2
sqlCmd.Connection.Open();
sqlDr = sqlCmd.ExecuteReader();

تقريبا المشكلة عند استخدام نفس ال connection مع اكثر من dataReader في نفس الوقت و بدون غلق ال dataReader الاول

يعني في السطر السابق ان تقوم بتنفيذ sqlCmd و من المحتمل ارتباط ال connection ب dataReader اخر

او انك قمت بتعديل ال commandText الخاص بال command و حاولت تنفيذه بدون غلق ال dataReader القديم

الحل عمل Close لل dataReader الذي يعتمد علي نفس ال connection او استخدام connection اخري او استخدام ميزة MARS

تم تعديل هذه المشاركة بواسطة AhmedElbaz في 15 أكتوبر 2008 في 10:52

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…