سلام دوستان، من یک فرم دارم و روی آن یک sqlconnection قرار دارم .حالا یک کلاس ایجاد کردم و می خوام از درون کلاس به sqlconnection در فرم اصلی مقدار بدهم ولی نمی دانم چطوری؟
آیا امکانش است؟
با تشکر
سلام دوستان، من یک فرم دارم و روی آن یک sqlconnection قرار دارم .حالا یک کلاس ایجاد کردم و می خوام از درون کلاس به sqlconnection در فرم اصلی مقدار بدهم ولی نمی دانم چطوری؟
آیا امکانش است؟
با تشکر
دوست عزیز
ساده ترین راه ممکن اینه که مقدار رو توی Session ذخیره کنی و هرجا که می خوای بخونیش و به هر چی که می خوای اختصاص بدی
میشه یکم بیشتر توضیح بدید.منظور از session چیست و باید چکار کنم
باید یک خاصیت برای کانکشن در فرم اصلی تعریف کنید که بتونید به اون از طریق کلاس دسترسی داشته باشید.
بعد می تونید کانکشن رو در کلاس ایجاد کنید و توی آبجکت مورد نظرتون توی فرم اصلی قرار بدید.
@WishMaster:
Session؟
دوست عزیز میشه یک مثال ارائه بدید.ما تازه کارها خیلی مشکل داریم
با تشکر
نمی دونم درست متوجه شدم یا نه، ولی فکر کنم استفاده از 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();
}
}
بهتره اصلا SqlConnection را داخل کلاس مورد نظر به صورت public static تعریف کنی.
public Class Class1
{
public static SqlConnection sqlConnection = "";
}
و داخل فرم مورد نظر نیز از همان اسفاده کنید.
this.sqlConnection = Class1.sqlConnection ;
برای مشکل ایشون نیازی به استفاده از پترن ها نیست، به سادگی همونطور که گفتم مشکل حل میشه!
دوست عزیز من کد زیر را در کلاسم وارد کردم ولی موقع اجرا خطا میده :
کد کلاس :
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
دوست عزیز
میتونی از این راه استفاده کنی
کلاسی که یک SqlConnection خروجی میدهد
classhasan
{
publicstaticSqlConnection getSqlConnection()
{
string ConnectionString = "";
SqlConnection conn = newSqlConnection(ConnectionString);
return conn;
}
}
کلاسی که از کلاس قبلی استفاده می کند:
classKhatarnakehasan
{
privateSqlConnection sql = hasan.getSqlConnection();
}
اگه متوجه نشدی بگو تا بیشتر توضیح بدم
درسته که پترن سینگلتون ساده ترین پترنه و کلا پترن طراحی رو ساده می کنه، ولی درک اون برای کسی که هنوز نمی دونه چه طوری از یک فرم به یک کلاس دسترسی داشته باشه یه کمی گیچ کننده است.
دوست عزیز wishmaster اگه بیشتر توضیح بدهید ممنون میشم
با تشکر
دوستان خیلی خیلی ممنون مشکل را با استفاده از متد و ارسال پارامتر حل کردم ولی آقای احمدی عزیز ذکرکردند "باید یک خاصیت برای کانکشن در فرم اصلی تعریف کنید که بتونید به اون از طریق کلاس دسترسی داشته باشید.
بعد می تونید کانکشن رو در کلاس ایجاد کنید و توی آبجکت مورد نظرتون توی فرم اصلی قرار بدید. "
منظور ایشان را دقیقا متوجه شدم ولی نمی دانم چطوری پیاده اش کنم . آیا امکانش است یک مثال ساده بزنید.
با تشکر
روشی که آقا/خانم Sorenaa_s گفتن، کامل و درسته و جوابگوی مشکل شما هست. روش من عکس روش ایشون بود، فرض کنید می خواهید بتونید از خارج از فرم (نه صرفاً یک کلاس مشخص) بتونید به این کانکشن مقدار دهی کنید. به این ترتیب باید برای فیلد کانکشن یه خاصیت تعریف کنید تا بتونید از خارج از کلاس فرم و در کلاسهای دیگه هم اون رو مقدار دهی کنید.
ولی روش پست 6 واضحه و می تونه کامل مشکلتون رو حل کنه.
موفق باشید.
دوست عزیز میشه در این روشی که شما ذکر کردید یک مثال ارائه بدید.
وقتی شما یه خاصیت public برای کانکشن تعریف کنید، می تونید از کلاسهای دیگه که به اون اینستنس دسترسی دارن، مقدار اون رو تغییر بدید، این مورد واضحه.
فقط باید به نحوی در کلاس، به نمونه ای از فرم که ایجاد شده و می خواهید مقدار خاصیت رو در اون تغییر بدید دسترسی داشته باشید.
دوست عزیز
ببین شما یک کلاس تعریف میکنی که خروجی آن یک SqlConnection است و هر مقداری که می خوای به این کلاس میدی بعد از توی برنامت به SqlConnection میگی که مقدارش رو از توی کلاس بخونه
مثلا:
یک SqlConnection نیاز به یک ConnectionString داره تو می تونی کانکشن استرینگ رو بصورت یک متغیر string ببراش تعریف کنی حالا این متغیر رو یا بصورت مستقیم بهش کانکشن استرینگ میدی یا اینکه میگی از توی وب کانفیگ خودش بخونه
خواندن کانکشن استرینگ از توی وب کانفیگ:
System.Configuration.ConfigurationManager.ConnectionStrings["YourConnectionString"].ToString();
کلاست رو هم به این صورت می نویسی که یک SqlConnection خروجی میده و یک متد به اسم GetSqlConnection داره که مقدار رو مشخص می کنه (تو این مثال مقدار ConnectionString )
class hasan{
public static SqlConnection getSqlConnection()
{
string ConnectionString =
System.Configuration.ConfigurationManager.ConnectionStrings["YourConnectionString"].ToString();
SqlConnection conn = newSqlConnection(ConnectionString);
return conn;
}
}
حالا توی برنامه SqlConnection رو طوری تعریف می کنی که مقدارش رو از توی کلاس بخونه و چون کلاس رو بصورت Static تعریف کردیم نیاز نیست که ازش Instans بگیری
System.Data.SqlClient.SqlConnection SC = hasan.getSqlConnection();
به این صورت یک SqlConnection داری که همیشه مقدار ConnectionString اش رو بر اساس مقدار کلاست می خونه