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

نام تاپیک: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

  1. #1

    Question آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    با سلام و خسته نباشد

    من تو یه برنامه با دیتابیس SQL نیاز به ارتباط زیادی با برنامه دارم. خوب البته مثل همه برنامه های دیتابیس !!!

    حالا سوالم اینه که ایا بهتره فقط موقع نیاز با دیتابیس ارتباط داشته باشم (حالت اول)
    به این شکل که کانکشن ساخته بشه (مقدار دهی بشه - باز بشه - کار مورد نظر انجام شه - بسته شه - حافظه آزاد شه - البته هر بار به این شکل)، یا اینکه یه کانکشن باشه و مقدار دهی شده باشه و فقط موقع نیاز باهاش کار بشه (حالت دوم) (باز بشه - کار مورد نظر انجام شه - بسته شه)

    -- البته از نظر زمانی زیر چند دهم یا صدم ثانیه اختلاف مهم نیست.
    -- برنامه نیازی نداره که همش دیتابیس باز باشه - چون اطلاعات تو دیتاستها یا دیتا تیبل ها بصورت کش شده هست.
    -- زمان باز بودن برنامه هم زیاده مثلا هر روز صبح تا شب (ساعات کاری) (منظورم اینه که موقتی یا فقط روزی چند ساعت باهاش کار نمیشه)


    ممنون از زمانی که میذارین.
    آخرین ویرایش به وسیله tehran11 : دوشنبه 14 فروردین 1391 در 10:05 صبح

  2. #2

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    سلام ، اصلش اینه که شما واسه یک پروژه از یک کانکشن استفاده کنید نه اینکه واسه هر عملی که روی بانک انجام بدین یک کانکشن رو ایجاد کنید.

    -- برنامه نیازی نداره که همش دیتابیس باز باشه - چون اطلاعات تو دیتاستها یا دیتا تیبل ها بصورت کش شده هست.
    این حرفتون درسته که باید در زمانی که به کار با دیتابیس اصلی نیاز هست کانکشن باز بشه ، کاره مورد نظر انجام بشه و سپس بسته شه ، و زمان این کار اصلا محسوس نیست ،

    شما اطلاعات رو داخل حافظه ی اصلی یا همون رم ( داخل datatable ها و dataset ) میریزین و با اونا سروکار دارین مگر زمانی که بخواین اطلاعات رو داخل دیتابیس اصلی اعمال کنید.



    -- زمان باز بودن برنامه هم زیاده مثلا هر روز صبح تا شب (ساعات کاری) (منظورم اینه که موقتی یا فقط روزی چند ساعت باهاش کار نمیشه)
    این مهم نیست.

  3. #3

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    یه مثال برا حالت اول :

      public bool ExecDBNonQueryCommand(string DBCommand, string[] s)
    {
    SqlConnection scon;
    SqlCommand scom;
    bool return_value = false;

    scon = new SqlConnection(con_str());
    scom = new SqlCommand(DBCommand, scon);
    scom.CommandType = CommandType.StoredProcedure;
    // Send Parameters
    try
    {
    scon.Open();
    int i = scom.ExecuteNonQuery();
    if (i == 1)
    {
    return_value = true;
    }
    else
    {
    return_value = false;
    }
    }
    catch (Exception e)
    {
    // Display error message
    }
    finally
    {
    scon.Close();
    scom.Dispose();
    scon.Dispose();
    }
    return return_value;
    }


    یه مثالم برا حالت دوم :

    public bool ExecDBNonQueryCommand(string DBCommand, string[] s)
    {
    bool return_value = false;

    scon.Connection = con_str(); // متغیر قبلا بصورت سراسری ایجاد شده
    scom.Connection = con_str(); // متغیر قبلا بصورت سراسری ایجاد شده
    scom.CommandText = DBCommand;
    scom.CommandType = CommandType.StoredProcedure;
    // Send Parameters
    try
    {
    scon.Open();
    int i = scom.ExecuteNonQuery();
    if (i == 1)
    {
    return_value = true;
    }
    else
    {
    return_value = false;
    }
    }
    catch (Exception e)
    {
    // Display error message
    }
    finally
    {
    scon.Close();
    }
    return return_value;
    }
    آخرین ویرایش به وسیله tehran11 : دوشنبه 14 فروردین 1391 در 10:35 صبح

  4. #4

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    100 درصد حالت دوم بهتر هست ،

    شما باید واسه هر پروژه ای که میسازین یک کانکشن رو تعریف کنین و در جاهای مختلف ازش استفاده کنید ، مثل همون کد دومیتون ، فقط حواستون باشه ، هر وقت کانکشن رو بزا میکنید حتما ببندیدش تا در جاهای مختلف با خطا روبه رو نشین.

  5. #5

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    vbBoss عزیز، ممنون از جوابهای خیلی سریعت.

    اگه اینجوریه تو این پروژم با یه مشکل مواجه میشم، و اونم اینه که من تو چند تا فرم مختلف با دیتا بیس کار میکنم. یکی برا ایجاد یه مورد جدید. یکی برا اصلاح. یکی برای انتخواب و حذف.
    حالا اون کانکشن اصلیه رو کجا بسازم که از تو کلاس اون چند تا فرم بتونم صداش کنم ؟؟؟

  6. #6

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    من خودم بیشتر موارد از پروژه ها رو به سبک ORM یا linq to sql میسازم و کانکشن استرینگ رو داخل Setting برنامه ذخیره میکنم ،


    آموزش: آموزش Settings


    شما با چه تکنولوژی برنامتون رو مینویسین؟

  7. #7

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    راستش شاید در حدی نباشم که حرف از سبک و روش بزنم، ولی من بیشتر ترجیح میدم که همه چیز رو تو کد برنامه داشته باشم حتی تا اونجایی که بتونم کامپوننت ها رو هم رانتایم میسازم.
    در مورد تنظیمات هم یا تو فایل ini یا xml میذارمشون، کنار فایل اجرایی برنامه. اینجوری موقع اپدیت یا توضیح چیزی به کاربر یا تغییر و اصلاح اون توسط کاربر راحت تره.
    چون نظرم اینه که اینجوری کنترلم بیشتره البته نمیدونم که درسته یا نه ؟ !!!!!!

  8. #8
    کاربر دائمی آواتار p.yazdkhasti
    تاریخ عضویت
    فروردین 1391
    محل زندگی
    http://devnet.ir
    پست
    121

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    سلام
    پیشنهاد من این است که وارد جزییات این بخش نشوید و در نرم افزار های خود از یک ORM مانند Entity Framwork به منظور ارتباط با پایگاه داده استفاده نمایید. ولی پاسخ به سوال شما این است که به منظور ساخت Object های مورد نیاز در نرم افزار ها معمولا از یک کتابخانه Dependency Injection استفاده می شود و بنابراین روش بهینه برای ساخت Connection خود در نرم افزار استفاده از این کتابخانه ها یا استفاده از یک Factory است. در Entity Framework به منظور ساخت Connection ها از یک Factory استفاده می شود. شما می توانید از کلاس System.Data.SqlClient.SqlClientFactory در نرم افزار خود استفاده نمایید.
    شما باید با هر بار استفاده از Connection آن را حتما ببندید. علاوه بر این نگران ساخته شدن Connection های جدید نباشید زیرا با ثابت بودن Connection String به صورت پیش فرض ADO.Net به منظور ارتباط با پایکاه داده از Connection pooling استفاده می کند.
    به منظور اطلاعات بیشتر می توانید به لینک های زیر مراجعه کنید:
    http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx
    http://msdn.microsoft.com/en-us/libr...ntfactory.aspx

  9. #9

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    با سلام خدمت همه دوستان

    من مشکلمو با این روش حل کردم:


    اول یه کلاس درست کردم و کانکشن رو توش تعریف کردم، به نام DataFunctions :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data;
    using System.Data.SqlClient;

    namespace MyApp
    {
    public class DataFunctions
    {
    SqlConnection scon;

    public bool ConfigConnection()
    {
    string con_str = @"Data Source=.\SQLEXPRESS;" +
    @"AttachDbFilename = " + Application.StartupPath +
    @"\DataBase.mdf;" +
    @"Integrated Security=True;" +
    @"Connect Timeout=30;" +
    @"User Instance=True";

    scon = new SqlConnection(con_str);
    try
    {
    open_connection();
    close_connection();
    return true;
    }
    catch (Exception e)
    {
    // show error message
    }
    }

    public void open_connection()
    {
    if (scon.State != ConnectionState.Open )
    {
    scon.Open();
    }
    }

    public void close_connection()
    {
    if (scon.State != ConnectionState.Closed)
    {
    scon.Close();
    }
    }
    }
    }



    بعدش تو فرم اصلی تعریفش کردم، البته استاتیک :
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace MyApp
    {
    public partial class frmMain : Form
    {
    public static DataFunctions df = new DataFunctions();

    public frmMain()
    {
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    if (!df.ConfigConnection())
    {
    // show message
    // close application
    }
    }
    }
    }



    حالا تو فرمای دیگه فقط open میکنم و بعد از استفاده close، اینجوری :

    frmMain.df.open_connection()


    اینجوری هم یه بار کانکشن تعریف کردم، هم همه جا در دسترسه

  10. #10

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    اگر از ADO.NET استفاده می کنید نیاز نیست به این مسئله فکر کنید چون اصولا ADO.NET هیچوقت برای همیشه به پایگاه وصل نیست و اینکارو خودکار انجام میده . شما connect شو و بقیشو بسپار به خودش !

    بعد از اینکه شما به پایگاه وصل شدید ADO.NET از دادهها به صورت XML کپی میگیره و connection رو تا زمانی باز نگاه میداره که کار کپی یا بروز رسانی تموم بشه.
    هر وقت شما AcceptChanges یا Update میکنی ADO.NET خودش به پایگاه به صورت مجدد وصل میشه و بروز رسانی رو انجام میده و دوباره قطع میشه. اون open مثل Open کردن فایل نیست. بیشتر به این معنی که شما اجازه دسترسی به پایگاه رو دارید و همچنین از server میخواد که در حالی که شما دارید با پایگاه کار می کنید اجازه پاک شدن فایلهای اصلی پایگاه رو نده و همچنین مدیریت چند کاربر که همزمان قراره با پایگاه کار کنند رو به عهده میگیره. ولی به این معنی نیست که همیشه همه ی اطلاعات توی پایگاه بعد از اتصال شما به برنامه ی شما مستقیما وصل باشه.

  11. #11

    نقل قول: آیا بهتره که کانکشن SQL طی اجرای برنامه باز باشه یا فقط موقع نیاز باز باشه ؟

    دوست عزیز منظورم تو این پروژه C#‎ هستش.

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

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