نمایش نتایج 1 تا 4 از 4

نام تاپیک: دوتا کوئری با یک کانکشن

  1. #1

    دوتا کوئری با یک کانکشن

    سلام
    یک سوال دیتابیسی دارم

    <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>

    اولی کار می کنه ولی به دومی که می رسه ارور می ده

  2. #2
    چون 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;;

  3. #3
    سلام

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

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

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

    Connect.Close();

  4. #4
    منظور از 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;;


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

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •