PDA

View Full Version : مشکل در تعریف کانکشن استرینگ سراسری



programers0
سه شنبه 09 مهر 1392, 19:14 عصر
با سلام
من یه کلاس برای باز کردن و کار با دیتا دارم داخل اون یه متغیر به شکل زیر تعریف کردم
public static SqlConnection Con_Proc = new SqlConnection("Data Source='.';Initial Catalog=Amval;User ID=sa;Password=123456");

حالا من میخوام در ابتدای شروع به کار با برنامه کانکشن رو باز کنم و در طول اجرای برنامه ازش استفاده کنم و زمان خارج شدن از برنامه کانکشن رو ببندم

در ضمن میخوام داخل هر کلاس هم یه متغیر از نوع کلاس به صورت عمومی تعریف کردم که نیاز نباشه برای هر عمل یه کلاس جدید تعریف کنم

باید چکار کنم
با تشکر از دوستان

fjm11100
سه شنبه 09 مهر 1392, 20:02 عصر
using System; public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new Object(); private Singleton() {} public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } } return instance; } } }

darkwish
سه شنبه 09 مهر 1392, 21:09 عصر
سلام دوست عزیز فایل های دیتابیس رو تو فولدر دیباگ برنامه ات کپی کن و در program برنامه یا یه کلاس دیگه این کد را بزار دیگه نیاز به اتچ کردن نداره و در تمام برنامه وجود دارد

public static string connctionstring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" +
System.IO.Directory.GetCurrentDirectory() +
@"\db_name.mdf;Integrated Security=True;User Instance=true";

و هر جه نیاز به کانکشن استرینگ داشتی به این صورت استاده کن:

program.connctionstring
یا اینکه اگر در یک کلاس نوشتی کد رو

classname.connctionstring

programers0
چهارشنبه 10 مهر 1392, 08:20 صبح
از پاسخ شما سپاسگزارم
مشکل من یه چیز دیگست
من میخوام زمانی که برنامه باز میشه کانکشن رو باز کنم و دیگه بسته نشه
و هر جایی که میخوام به دیتابیس وصل بشم از اون کانکشن که بازه استفاده کنم

programers0
پنج شنبه 11 مهر 1392, 15:01 عصر
کسی راه حلی نداره؟

fjm11100
پنج شنبه 11 مهر 1392, 16:24 عصر
شما اصلا کد منو دیدی؟

programers0
شنبه 13 مهر 1392, 09:37 صبح
آره دیدم دوست عزیز ولی چیزی متوجه نشدم
میشه راهنمایی کنید؟

behzadkhatari
شنبه 13 مهر 1392, 11:33 صبح
از پاسخ شما سپاسگزارم
مشکل من یه چیز دیگست
من میخوام زمانی که برنامه باز میشه کانکشن رو باز کنم و دیگه بسته نشه
و هر جایی که میخوام به دیتابیس وصل بشم از اون کانکشن که بازه استفاده کنم

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

programers0
یک شنبه 14 مهر 1392, 07:36 صبح
ممنون
خوب حالا بفرمایید که چطور یه متغیر عمومی تعریف کنم که داخل همه کلاس ها بتونم ازش استفاده کنم به شرطی که مقدارشو از دست نده
میخوام یه متغیر تعریف کنم که تنظیمات مربوط به برنامه رو داخل اون بریزم و هر جا خواستم ازش استفاده کنم

ahmad002
یک شنبه 14 مهر 1392, 07:43 صبح
از پاسخ شما سپاسگزارم
مشکل من یه چیز دیگست
من میخوام زمانی که برنامه باز میشه کانکشن رو باز کنم و دیگه بسته نشه
و هر جایی که میخوام به دیتابیس وصل بشم از اون کانکشن که بازه استفاده کنم

سلام در قسمت form_load اینو بنویسید
Con_Proc.open()
اینطوری در سراسر برنامه کانکشن بازه و بسته نمیشه مگر اینکه از متد Con_Proc.close() استفاده کنی!

behzadkhatari
یک شنبه 14 مهر 1392, 08:16 صبح
یه متغیر public staticتو کلاس تعریف کن و ازش استفاده کن

fjm11100
یک شنبه 14 مهر 1392, 09:30 صبح
اون کدی که گذاشتم پیاده سازی singleton برای اتصال به دیتابیس
singleton یک pattern است که تضمین میکنه از یک کلاس فقط یک نمونه ساخته میشه و تا آخرش هم میمونه چون استاتیک است.
البته روش ساده تر ولی کمی کثیف تعریف یک متغیر static در program.cs است.

programers0
یک شنبه 14 مهر 1392, 13:00 عصر
دوست عزیزم از پاسخ شما بسیار سپاسگزارم
ولی چرا اینقدر آدمو می پیچونید؟
واضح کدتونو توضیح بدید و مشخص کنید که باید چطور ازش استفاده کنم
از کدوم کلاس یه نمونه ساخته میشه؟

فرضا که من یه کلاس به نام class1 داشته باشم . چطور با کد شما اونو ثابت در نظر بگیرم؟
این کد رو کجا باید تعریف کنم؟
از لطف شما ممنون

fjm11100
یک شنبه 14 مهر 1392, 14:28 عصر
قبول دارم کمی پیچیده است و دلیلی هم نداره روشی که من گفتم را استفاده کنی ولی اصولی ترین روش همینه. بعدها که جلوتر بری بیشتر پی به ارزش design pattern ها می بری
ولی میتونی یک کلاس مثلا classDB ایجاد کنی و یک متغیر استاتیک توش بزاری که از نوع SqlConnection باشه و بعد در ابتدای برنامه بازش کنی و هرجا خواستی با classDB.myConn ازش استفاده کنی