PDA

View Full Version : ذخیره آبجکت در دیتابیس



_behnam_
سه شنبه 15 اسفند 1391, 10:52 صبح
سلام دوستان/
میخواستم بدونم میشه یک آبجکت رو در دیتابیس ذخیره کرد و موقع نیاز اون رو از دیتابیس گرفت و تو پروژه استفاده کرد؟
یه برنامه دارم که میاد از یک کلاس به تعداد زیاد شئی میسازه و تویList<class> a ادد میکنه.
اگه بخوام توی List دنباله شئی بگردم ناچارم که با یک حلقه بگردم .
میخوام تو دیتابیس ذخیره کنم. بعد آبجکت رو از دیتابیس بکشم بیرون و با IndexOF اون رو از توی لیست پیدا کنم.


ممنون/

pedram.11
سه شنبه 15 اسفند 1391, 11:33 صبح
سلام دوست عزیز
مبتونی اون آبجکت رو در کلاس قرار بدی و سریالایز کنی
این تاپیک (http://barnamenevis.org/showthread.php?387303-%DA%A9%D9%85%DA%A9-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-(%D8%B3%D8%B7%D8%AD-%D9%85%D8%A8%D8%AA%D8%AF%DB%8C)) به کارت میاد تنها کافیه بجای اینکه در فایل ذخیره کنی در دیتابیس ذخیره کنی

Mahmoud.Afrad
سه شنبه 15 اسفند 1391, 12:13 عصر
یعنی فقط برای جستجو در لیست میخواهید این کارو انجام بدید؟ خب به طور مستقیم در لیست جستجو کنید. در ضمن وقتی شما شئ رو دارید دیگه چه نیازی به ذخیره در دیتابیس و خوندون اون هست؟! اصلا وقتی شئ رو دارید چه نیازی به جستجو هست؟!
اگر هم شئ رو ندارید و میخواهید پیداش کنید میتونید از Linq و یا از متد Find استفاده کنید.

کد کلاس رو بزارید و بگید چجور میخواهید جستجو کنید.

_behnam_
سه شنبه 15 اسفند 1391, 14:49 عصر
ببینید :
یک کلاس داریم : Socket
Class Socket
{
string Username;
Winsock Sck;
}

من یه لیست خطی دارم از نوع Socket
List<Socket> listsck = new List<Socket>();

تعداد آیتم های این لیست بالاست .
حالا وقتی که توی یک متد Object Sender رو دارم که با IndexOf راحت میکشمش از لیست بیرون.
اما اکثرا Object رو ندارم و فقط Username رو دارم و میخوام از روی اون Object مربوط رو پیدا کنم.
private Socket getSocket(string Username){
foreach(Socket sck in listsck)
{
if(Username==sck.Username )
return sck;
}
}

حالا اگه بطونم شبیه سازی متود getSocket رو با دیتابیس پیاده سازی کنم میتونم از طریق Username از توی بانک یا هرجا که ذخیره شده باشه object رو بدست بیارم .

ممنون/

Mahmoud.Afrad
سه شنبه 15 اسفند 1391, 16:23 عصر
class Socket
{
public string Username;
//Winsock Sck;
}


توسط متد Find میتونید پیداش کنید. ابتدا یک متغیر استرینگ(user) تعریف کنید برای یوزرنیمی که دنبالش هستید

List<Socket> listsck = new List<Socket>();
string user;

متد Find رو صدا بزنید:

Socket s = listsck.Find(new Predicate<Socket>(FindSocket));

FindSocket متدی هست که خودم نوشتم که در صورتیکه مقدار برابر بود true برمیگردونه و اون شئ انتخاب میشه:

private bool FindSocket(Socket socket)
{
if (socket.Username == user)
return true;
else
return false;
}



و یا
از طریق Linq هم در یک خط بدست میاد:
Socket s = listsck.SingleOrDefault(item => item.Username == user);


برای استفاده از s باید چک کنید که null نباشه:
if (s != null)
MessageBox.Show("Found");

از همه اینا بگذریم همه این راهها از یک حلقه برای پیدا کردن شئ استفاده میکنند فقط کد کمتری میبره پس متد خودتون هم کد خوبیه.