PDA

View Full Version : طراحی دیتا ریدر در سیستم سه لایه



Mrs.Net
سه شنبه 24 مهر 1386, 09:28 صبح
تو یک برنامه سه لایه چجوری میشه تو لایه بیزنس از یک دیتاریدر استفاده کرد؟
میخوام با هربار خوندن یک سری عملیات رو اطلاعات انجام بدم و جاهی مختلف فرمم نمایش بدم. اما دیتا ریدر باید تو لایه دیتا ساخته بشه و خواندنش تو لایه بیزنس یا حتی لایه نمایش

alirzn
سه شنبه 24 مهر 1386, 09:47 صبح
public DataTable selectinfo(string query)
{
try
{
if (dt != null)
dt = null;
com = new SqlCommand(query, con);
con.Open();
dr = com.ExecuteReader();


}
catch (Exception ex)
{
if (con.State == ConnectionState.Open)
con.Close();
System.Windows.Forms.MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
if (!dr.HasRows)
{
con.Close();
dr.Close();
return null;
}
else
return (dt);
}


این تابع رو تو لایه database بگذار و datatable رو return کن به لایه بیزنست یا اینترفیست.
و هر بار که دوباره احتیاج داشتی به سرچ تابع selectinfo رو صدا بزن.

Mrs.Net
سه شنبه 24 مهر 1386, 11:33 صبح
اولا که تو کد شما هیچ کجا dt پر نشده. (یا من ندیدم )
بعد هم نمیخوام یک تیبل پر کنم بفرستم. واسه اینکار از دیتا آداپتر استفاده میکنم
میخوام هربار که دیتا ریدر یک رکورد میخونه یکاری انجام بدم با اون رکورد و بعد رکورد بعدی خونده بشه.
ممنون

اَرژنگ
پنج شنبه 26 مهر 1386, 18:19 عصر
مثال ضمیمه شده اگر سوالی بود بفرمائید

اَرژنگ
جمعه 27 مهر 1386, 10:32 صبح
مثال بالا آپدیت شد، فکر کنم این یکی مثال یکمی بهتر باشد.

Mrs.Net
شنبه 28 مهر 1386, 14:04 عصر
مثال قبلی که دیدم خوب نبود
شما برای رویداد خواندن یک delegat ساخته بودید که باعث میشد حتما یک تابع براش تو برنامه درست کنیم. درواقع یک مرحله کار بیشتر شده بود (البته من اینجوری فهمیدم)
منظورم

privateList<Person> GellAllNamesFromDB(IDataReader reader)

هست.
این مثالتون الان میبینم
خیلی ممنون

Mahdi.Kiani
شنبه 28 مهر 1386, 14:09 عصر
مثال بالا آپدیت شد، فکر کنم این یکی مثال یکمی بهتر باشد.

کدوم یکی ؟ نه فایلی Attach شده و نه لینکی در جمله "مثال بالا آپدیت شد، فکر کنم این یکی مثال یکمی بهتر باشد." وجود داره

اَرژنگ
شنبه 28 مهر 1386, 16:24 عصر
کدوم یکی ؟ نه فایلی Attach شده و نه لینکی در جمله "مثال بالا آپدیت شد، فکر کنم این یکی مثال یکمی بهتر باشد." وجود داره
همان مثال بالاست، قدیمیش را ورداشتم و جدیدش را گذاشتم.

اَرژنگ
شنبه 28 مهر 1386, 16:33 عصر
مثال قبلی که دیدم خوب نبود
شما برای رویداد خواندن یک delegat ساخته بودید که باعث میشد حتما یک تابع براش تو برنامه درست کنیم. درواقع یک مرحله کار بیشتر شده بود (البته من اینجوری فهمیدم)
منظورم

privateList<Person> GellAllNamesFromDB(IDataReader reader)

هست.
این مثالتون الان میبینم
خیلی ممنون
دلایل استفاده از delegate زیرشان خط کشیده شده :


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


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

اینکه یک مرحله کار بیشتر شده برایه این است که باید از خودتان بپرسید که این تابع جدید که اضافه شده، متعلق به کدام لایه باید باشه؟ داشتنش در لایه داتا به نظر درست نمیاد، اگر دلیل فقط برایه عوض کردن نحوه نمایش است در آن حالت میشه که در لایه نمایش باشه (ولی در این حالت میشه در لایه نمایش کد را نوشت و این کار آسان است و مثال لازم نداره). تنها حالت جالب وقتی است که یک متد باید بر رویه ریدر انجام انجام بشه و منطق متد متعلق به لایه بیزینس باشد.
یکی از دلایل استفاده delegate اجرا کردن یک تیکه کد در یک قسمت دیگر میباشد، در بعضی زبانها به اینکار میگند کد اینجکشن و یا متد پئینتر در سی برایه همین کار استفاده میشند.

/asra/
یک شنبه 28 بهمن 1386, 01:29 صبح
من مثال رو دیدم!
پایگاه داده ی اون access بود و من با sql کار می کنم!
و BorrowReader در برنامه ی من غیر فعاله!

اَرژنگ
یک شنبه 28 بهمن 1386, 06:04 صبح
من مثال رو دیدم!
پایگاه داده ی اون access بود و من با sql کار می کنم!
و BorrowReader در برنامه ی من غیر فعاله!
۱)فکر کنم منظورتان sql نیست و SqlServer است.
۲)اگر هدفتان از این پست این است که بپرسید چطوری یک این مثال را برایه SqlServer ویرایش بدید ، بگید جواب میدم.
۳)"و BorrowReader در برنامه ی من غیر فعاله!" معنی نمیده! یعنی چی غیره فعاله؟ مگر قراره چکار کند؟
۴)برایه توضیح‌ دادن مشکلتتان یکمی وقت بگذارید، برایه ۳ خطی که شما نوشتید باید ۶ خط پرسید که بفهمیم شما چی میخواهید، اگر شما برایه توضیح مشکلاتتان وقت نگذارید چطور میشه انتظار داشته باشید برایه جوابش دیگران وقت بگذارند؟

/asra/
یک شنبه 28 بهمن 1386, 18:58 عصر
۱)فکر کنم منظورتان sql نیست و SqlServer است.
۲)اگر هدفتان از این پست این است که بپرسید چطوری یک این مثال را برایه SqlServer ویرایش بدید ، بگید جواب میدم.
۳)"و BorrowReader در برنامه ی من غیر فعاله!" معنی نمیده! یعنی چی غیره فعاله؟ مگر قراره چکار کند؟
۴)برایه توضیح‌ دادن مشکلتتان یکمی وقت بگذارید، برایه ۳ خطی که شما نوشتید باید ۶ خط پرسید که بفهمیم شما چی میخواهید، اگر شما برایه توضیح مشکلاتتان وقت نگذارید چطور میشه انتظار داشته باشید برایه جوابش دیگران وقت بگذارند؟

اشکالی نداره من اصلاً ناراحت نشدم :گریه:

1)پروژه ی من سه لایه است، می خوام اطلاعات یه Table رو تو DataGridView نمایش بدم!
2)فکر کنم یه راهش اینه که یه DataTable تعریف کنم و DataColumn و DataRow اون رو مقداردهی کنم و بعد اون رو به Interface بفرستم!
3)روش شما جالب بود و می خوام از اون استفاده کنم!
4)دارم از اون استفاده می کنم ولی چند تا مسئله باهاش دارم:
I) در برنامه ام BorrowReader آبی نمیشه! نمی دونم BorrowReader چیه؟
II)گفتم شاید چون من دارم با SqlServer کار میکنم این جوریه!
III)نمی دونم delegate چیه؟
IV)نمی خوام از روش شماره 2) استفاده کنم!

خوب من این ها رو نمی دونم!:لبخندساده:
من ازتون راهنمایی می خوام!:لبخندساده:

/asra/
دوشنبه 29 بهمن 1386, 17:30 عصر
دوستان کسی می تونه من رو راهنمایی کنه؟

اَرژنگ
سه شنبه 30 بهمن 1386, 02:16 صبح
اشکالی نداره من اصلاً ناراحت نشدم :گریه:

1)پروژه ی من سه لایه است، می خوام اطلاعات یه Table رو تو DataGridView نمایش بدم!
2)فکر کنم یه راهش اینه که یه DataTable تعریف کنم و DataColumn و DataRow اون رو مقداردهی کنم و بعد اون رو به Interface بفرستم!
3)روش شما جالب بود و می خوام از اون استفاده کنم!
4)دارم از اون استفاده می کنم ولی چند تا مسئله باهاش دارم:
I) در برنامه ام BorrowReader آبی نمیشه! نمی دونم BorrowReader چیه؟
II)گفتم شاید چون من دارم با SqlServer کار میکنم این جوریه!
III)نمی دونم delegate چیه؟
IV)نمی خوام از روش شماره 2) استفاده کنم!

خوب من این ها رو نمی دونم!:لبخندساده:
من ازتون راهنمایی می خوام!:لبخندساده:

اگر دارید با دات نت ۳.۰ کار میکنید بیخیال این روشها دیگر قدیمی شدند، روشهایه جدید از LINQ استفاده میکنند.

۲(اآسانترین روش هم همینه و اگر پروژهتان را باید در زمان کمی تحویل بدید از همین روش استفاده کنید، این روشهایه ۳ لایگی برایه برنامه هایی که مدت زیادی باید استفاده بشند خوبه. برایه برنامه هایه کوچیک و یا یکبار استافاده نمیارزند.

I)در تعریف DatServices.cs شده.
II) یک فایل جدید به SqlServerDb.cs نامه بسازید و AccessDB.cs را نگاه بندازید و به جایه OleDbConnection از SqlConnection استفاده کنید

III)به شکل خلاصه برایه این استفاده میشه که شما بتوانید بگید که من قراره از یک متد که اآرگومنهاش شکل بخصوصی هستند و تایپ بخصوصی که میتوانند برگردانند استفاده خواهم کرد، الان نمیدونم این متد چی هست ولی هر متدی که از این الگو پیروی کند را میشد به جاش استفاده کرد. یعنی یک چیزی مانند استفاده از متغییر برایه متد، منتها به جایه اینکه متغییر مقدار بخصوصی بگیرد ، متد بخصوصی را میگریه.

IV)اگر دارید با دات نت ۳.۰ کار میکنید بیخیال این روشها دیگر قدیمی شدند، روشهایه جدید از LINQ استفاده میکنند.

adonis
شنبه 10 فروردین 1387, 16:29 عصر
IV)اگر دارید با دات نت ۳.۰ کار میکنید بیخیال این روشها دیگر قدیمی شدند، روشهایه جدید از LINQ استفاده میکنند.
این استفاده از لینک خیلی جا نیفتاده من میخوام یه پروژه جدید رو باهاش استارت بزنم
ولی راستش نمی دونم اینکه واقعا بخواهیم sp رو کنار بذاریم و کدهای sql رو توی لایه business بیاریم بد نیست؟
در ضمن نمی دونم که واقعا فرقی میکنه که پروژه بزرگ باشه یا نه