PDA

View Full Version : متد در کلاس



Future
چهارشنبه 02 خرداد 1386, 11:08 صبح
سلام دوستان، من یک فرم دارم و روی آن یک sqlconnection قرار دارم .حالا یک کلاس ایجاد کردم و می خوام از درون کلاس به sqlconnection در فرم اصلی مقدار بدهم ولی نمی دانم چطوری؟
آیا امکانش است؟
با تشکر

Keramatifar
چهارشنبه 02 خرداد 1386, 11:23 صبح
دوست عزیز
ساده ترین راه ممکن اینه که مقدار رو توی Session ذخیره کنی و هرجا که می خوای بخونیش و به هر چی که می خوای اختصاص بدی

Future
چهارشنبه 02 خرداد 1386, 11:45 صبح
میشه یکم بیشتر توضیح بدید.منظور از session چیست و باید چکار کنم

omid_Ahmadi
چهارشنبه 02 خرداد 1386, 11:51 صبح
باید یک خاصیت برای کانکشن در فرم اصلی تعریف کنید که بتونید به اون از طریق کلاس دسترسی داشته باشید.
بعد می تونید کانکشن رو در کلاس ایجاد کنید و توی آبجکت مورد نظرتون توی فرم اصلی قرار بدید.

@WishMaster:
Session؟

Future
چهارشنبه 02 خرداد 1386, 12:33 عصر
دوست عزیز میشه یک مثال ارائه بدید.ما تازه کارها خیلی مشکل داریم
با تشکر

Sorenaa_s
چهارشنبه 02 خرداد 1386, 12:42 عصر
نمی دونم درست متوجه شدم یا نه، ولی فکر کنم استفاده از Singletone Pattern مشکلتون رو حل می کنه:



publicclass ConnectionManager
{

#region

Singleton Pattern


private ConnectionManager()


{

}


privatestatic ConnectionManager _instance = null;
publicstatic ConnectionManager Instance
{
get
{
if( _instance== null )
_instance = new ConnectionManager();
return _instance;
}
}
#endregion
public SqlConnection Connection;
}
publicclass MyForm: System.Windows.Forms.Form
{
public MyForm()
{
SqlConnection cnn = ConnectionManager.Instance.Connection;
cnn.ConnectionString = "";
cnn.Open();
}
}

Seivan
چهارشنبه 02 خرداد 1386, 12:52 عصر
بهتره اصلا SqlConnection را داخل کلاس مورد نظر به صورت public static تعریف کنی.



public Class Class1
{

public static SqlConnection sqlConnection = "";
}

و داخل فرم مورد نظر نیز از همان اسفاده کنید.


this.sqlConnection = Class1.sqlConnection ;

omid_Ahmadi
چهارشنبه 02 خرداد 1386, 12:53 عصر
برای مشکل ایشون نیازی به استفاده از پترن ها نیست، به سادگی همونطور که گفتم مشکل حل میشه!

Future
چهارشنبه 02 خرداد 1386, 13:04 عصر
دوست عزیز من کد زیر را در کلاسم وارد کردم ولی موقع اجرا خطا میده :

کد کلاس :
public class Genral_Class
{

public static SqlConnection sqlConnection = "Data Source = ASUS ; Initial Catalog = DuryHouse ; ID = sa ; Password = 123 ";

}


خطاء ====

Error 5 The type or namespace name 'SqlConnection' could not be found (are you missing a using directive or an assembly reference?) D:\Projects\C#\DuryHouse\Genral_Class.cs 11 23 DuryHouse

Sorenaa_s
چهارشنبه 02 خرداد 1386, 13:30 عصر
برای مشکل ایشون نیازی به استفاده از پترن ها نیست، به سادگی همونطور که گفتم مشکل حل میشه!

مگه Pattern بودن یعنی ساده نبودن؟!!!!!!

Keramatifar
چهارشنبه 02 خرداد 1386, 14:46 عصر
دوست عزیز
میتونی از این راه استفاده کنی

کلاسی که یک SqlConnection خروجی میدهد



class hasan
{
public static SqlConnection getSqlConnection()
{
string ConnectionString = "";
SqlConnection conn = new SqlConnection(ConnectionString);
return conn;
}
}


کلاسی که از کلاس قبلی استفاده می کند:



class Khatarnakehasan
{
private SqlConnection sql = hasan.getSqlConnection();
}


اگه متوجه نشدی بگو تا بیشتر توضیح بدم

شکارچی
پنج شنبه 03 خرداد 1386, 01:08 صبح
درسته که پترن سینگلتون ساده ترین پترنه و کلا پترن طراحی رو ساده می کنه، ولی درک اون برای کسی که هنوز نمی دونه چه طوری از یک فرم به یک کلاس دسترسی داشته باشه یه کمی گیچ کننده است.

Future
پنج شنبه 03 خرداد 1386, 02:38 صبح
دوست عزیز wishmaster اگه بیشتر توضیح بدهید ممنون میشم
با تشکر

Future
پنج شنبه 03 خرداد 1386, 02:50 صبح
دوستان خیلی خیلی ممنون مشکل را با استفاده از متد و ارسال پارامتر حل کردم ولی آقای احمدی عزیز ذکرکردند "باید یک خاصیت برای کانکشن در فرم اصلی تعریف کنید که بتونید به اون از طریق کلاس دسترسی داشته باشید.
بعد می تونید کانکشن رو در کلاس ایجاد کنید و توی آبجکت مورد نظرتون توی فرم اصلی قرار بدید. "
منظور ایشان را دقیقا متوجه شدم ولی نمی دانم چطوری پیاده اش کنم . آیا امکانش است یک مثال ساده بزنید.

با تشکر

omid_Ahmadi
پنج شنبه 03 خرداد 1386, 06:50 صبح
روشی که آقا/خانم Sorenaa_s گفتن، کامل و درسته و جوابگوی مشکل شما هست. روش من عکس روش ایشون بود، فرض کنید می خواهید بتونید از خارج از فرم (نه صرفاً یک کلاس مشخص) بتونید به این کانکشن مقدار دهی کنید. به این ترتیب باید برای فیلد کانکشن یه خاصیت تعریف کنید تا بتونید از خارج از کلاس فرم و در کلاسهای دیگه هم اون رو مقدار دهی کنید.

ولی روش پست 6 واضحه و می تونه کامل مشکلتون رو حل کنه.
موفق باشید.

Future
پنج شنبه 03 خرداد 1386, 07:14 صبح
دوست عزیز میشه در این روشی که شما ذکر کردید یک مثال ارائه بدید.

omid_Ahmadi
پنج شنبه 03 خرداد 1386, 07:27 صبح
وقتی شما یه خاصیت public برای کانکشن تعریف کنید، می تونید از کلاسهای دیگه که به اون اینستنس دسترسی دارن، مقدار اون رو تغییر بدید، این مورد واضحه.
فقط باید به نحوی در کلاس، به نمونه ای از فرم که ایجاد شده و می خواهید مقدار خاصیت رو در اون تغییر بدید دسترسی داشته باشید.

Keramatifar
پنج شنبه 03 خرداد 1386, 09:49 صبح
دوست عزیز
ببین شما یک کلاس تعریف میکنی که خروجی آن یک SqlConnection است و هر مقداری که می خوای به این کلاس میدی بعد از توی برنامت به SqlConnection میگی که مقدارش رو از توی کلاس بخونه
مثلا:

یک SqlConnection نیاز به یک ConnectionString داره تو می تونی کانکشن استرینگ رو بصورت یک متغیر string ببراش تعریف کنی حالا این متغیر رو یا بصورت مستقیم بهش کانکشن استرینگ میدی یا اینکه میگی از توی وب کانفیگ خودش بخونه
خواندن کانکشن استرینگ از توی وب کانفیگ:



System.Configuration.ConfigurationManager.Connecti onStrings["YourConnectionString"].ToString();


کلاست رو هم به این صورت می نویسی که یک SqlConnection خروجی میده و یک متد به اسم GetSqlConnection داره که مقدار رو مشخص می کنه (تو این مثال مقدار ConnectionString )


class hasan{
public static SqlConnection getSqlConnection()
{
string ConnectionString =
System.Configuration.ConfigurationManager.Connecti onStrings["YourConnectionString"].ToString();
SqlConnection conn = newSqlConnection(ConnectionString);
return conn;
}
}


حالا توی برنامه SqlConnection رو طوری تعریف می کنی که مقدارش رو از توی کلاس بخونه و چون کلاس رو بصورت Static تعریف کردیم نیاز نیست که ازش Instans بگیری



System.Data.SqlClient.SqlConnection SC = hasan.getSqlConnection();

به این صورت یک SqlConnection داری که همیشه مقدار ConnectionString اش رو بر اساس مقدار کلاست می خونه