PDA

View Full Version : دوتا کوئری با یک کانکشن



iran400
دوشنبه 26 اردیبهشت 1384, 21:34 عصر
سلام
یک سوال دیتابیسی دارم

<p dir="ltr" align="left">
String ConnectionStr = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=test.mdb; Persist Security Info=False";
String SqlText;
SqlText = "Select * from VisitSite order by id desc";
OleDbConnection Connect=new OleDbConnection(ConnectionStr);
OleDbCommand CmdSelect2 = new OleDbCommand();
CmdSelect2.Connection=Connect;
CmdSelect2.CommandText =SqlText;
CmdSelect2.ExecuteReader();

OleDbCommand CmdSelect = new OleDbCommand();
CmdSelect.Connection=Connect;
CmdSelect.CommandText =SqlText;
CmdSelect.ExecuteReader();
</p>
اولی کار می کنه ولی به دومی که می رسه ارور می ده

یاشار
دوشنبه 26 اردیبهشت 1384, 22:39 عصر
چون Connection رو صراحتا ( explicitly ) باز نکردید، فرمان اول اون رو تلویحا ( implicitly ) باز میکنه و بعد از اینکه کارش تموم شد هم می‌بنده. در نتیجه ارتباط شما با دیتابیس در فرمان دوم قطع می‌شه.


OleDbConnection Connect = new OleDbConnection&#40;ConnectionStr&#41;;

OleDbCommand CmdSelect2 = new OleDbCommand&#40;&#41;;
CmdSelect2.Connection = Connect;
CmdSelect2.CommandText = SqlText;

OleDbCommand CmdSelect = new OleDbCommand&#40;&#41;;
CmdSelect.Connection=Connect;
CmdSelect.CommandText = SqlText;

Connect.Open&#40;&#41;;

CmdSelect2.ExecuteReader&#40;&#41;;
CmdSelect.ExecuteReader&#40;&#41;;

Connect.Close&#40;&#41;;

iran400
سه شنبه 27 اردیبهشت 1384, 21:49 عصر
سلام

اگر می‌شه توضیح بیشتری بدهید. منظور از explicitly چیست؟

درضمن روش شما هم جواب نداد!
<p dir="ltr" algin=left>
Connect.Open();

CmdSelect2.ExecuteReader();
CmdSelect.ExecuteReader();

Connect.Close();

یاشار
چهارشنبه 28 اردیبهشت 1384, 16:10 عصر
منظور از explicitly چیست؟

یعنی شما Connnect.Open رو بنویسید. اگر این فرمان رو ننویسید ، SqlCommand خودش کانکشنی رو که براش تعیین کردید ( CmdSelect2.Connection = Connect ) باز می‌کنه ولی وقتی کارش تموم شد اون رو می‌بنده. وقتی شما Connect.Open رو می‌نویسید یعنی خودتون صراحتا ( explicitly ) کانکشن رو باز کردید و باز کردن کانکشن رو به Command واگذار نکردید. بنابراین خودتون هم مسول بستن اون هستید، یعنی تا وقتی که Connect.Close رو ننوشتید، کانکشن باز خواهد ماند.


درضمن روش شما هم جواب نداد!

احتمالا اشکال اینجاست که این OleDBCommand شما، یه DataTable برمی‌گردونه ولی ما هیچ جدولی رو تعیین نکردیم که مقدار برگشتی رو بگیره. ( یا اینکه کار دیگه‌ای بکنه که بستگی به برنامه‌تون داره )


DataTable DT = new DataTable&#40;&#41;;
DT = CmdSelect2.ExecuteReader&#40;&#41;;


اگر هم پیغام خطای خاصی می‌گیرید، پست کنید تا اشکال مشخص‌تر بشه.