PDA

View Full Version : سوال: بهترین روش برای کار با دیتابیس



سعید کشاورز
جمعه 19 آبان 1391, 17:40 عصر
سلام دوستان...میخاستم بدونم برای کار با بانک های اطلاعاتی بهترین روش چی هستش؟
منظورم رو با مثال توضیح میدم:
مثلا من توی یه آموزش دیدم که واسه add کردن مقادیر توی دیتابیس طرف اومده بود همه کدها رو توی دکمه نوشته بود..یعنی تمام نمونه سازی های موجود و اتصال به دیتابیس و ارتباط با اون و دستور SQL و...
خوب این روش زیاد منظقی نیست چون شما مجبوری واسه هر دکمه این همه کد بنیویسی.
یه روش دیگه دیدم که جالب تر بود.اینم اون بود که طرف اومد که کلاس ساخت به اسم DataAceess.cs بعدش 4 تا تابع اصلی رو توی اون کلاس ایجاد کرده بود که برای ارتباط با بانک بود..کدهای اون کلاس یه شرح زیر بود:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace WindowsFormsApplication1
{
public class DataAccess
{

OleDbConnection con = new OleDbConnection();
public void Connect()
{
con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb ";
if (con.State == ConnectionState.Closed) con.Open();
}

public void Disconnect()
{
if (con.State == ConnectionState.Open) con.Close();
}

public DataTable Docommand(OleDbCommand com)
{
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter(com);
com.Connection = con;
com.CommandType = CommandType.Text;
da.Fill(dt);
return dt;
}

public void Command(OleDbCommand com)
{
com.Connection = con;
com.CommandType = CommandType.Text;
com.ExecuteNonQuery();
}

}
}

بعدش اومده بود به ازای هر جدول توی بانک یک کلاس دیگه ساخته بود..مثلا اونجا 3 تا جدول داشت و توی پروژه 3تا کلاس ساخته بود و کدهای مربوط به هر جدول رو توی اون کلاس مینوشت.حالا هر بار که میخواست توی جدول مقداری رو add کنه کد نویسی برای هر دکمه به حد اقل رسیده بود.دقیقا اسم این روش رو نمیدونم چی میشه.
حالا سوالم از شما اینه که به جر این روش ها چه روش های دیگه ای وجود داره واسه ارتباط با دیتابیس که کد نویسی رو به حداقل خودش برسونه؟

ma.rad
جمعه 19 آبان 1391, 17:51 عصر
خب مسلما معماری سه لایه (استفاده از کلاس) خیلی بهتر تا اینکه هر دفعه برای هر دکمه کد ها رو تکرار کنید . برنامه خواناتر می شه ،کدنویسی کمتری می خواد.
روش هاس زیادی هست که من به شما استفاده از StoredProcedure پیشهناد می کنم

سعید کشاورز
جمعه 19 آبان 1391, 18:09 عصر
خب مسلما معماری سه لایه (استفاده از کلاس) خیلی بهتر تا اینکه هر دفعه برای هر دکمه کد ها رو تکرار کنید . برنامه خواناتر می شه ،کدنویسی کمتری می خواد.
روش هاس زیادی هست که من به شما استفاده از StoredProcedure پیشهناد می کنم
مرسی از پاسختون..این روشی که گفتین بهتر از معماری 3 لایه هستش؟ آیا آموزش فارسی براش هست؟

ma.rad
جمعه 19 آبان 1391, 18:18 عصر
بله تو سایت جستجو کنید آموزشش موجوده
از معماری سه لایه بهتر،چون دستورات sql درخود sql نوشته می شه نیاز به کامپایل نداره ،سرعت بالاتری داره و امکان خطاش کمتره، و تعداد اتصال به بانک کاهش پیدا می کنه

mansourm
جمعه 19 آبان 1391, 18:39 عصر
دو ست عزیز من یه کلاسی نوشتم که کاربر تو برنامه فقط یک خط کد مینویسه برای حذف - اضافه - ویرایش و جستجو اینم نمونش خدمتشما
کد



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Globalization;

namespace Yas_monitoring
{
class connection
{

public static SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\DBM.mdf;Integrated Security=True;User Instance=True;Connection Timeout=60");
public static SqlDataAdapter da = new SqlDataAdapter();
public static SqlCommandBuilder scb = new SqlCommandBuilder();
public static SqlCommand scm = new SqlCommand();
public static DataTable DT = new DataTable();
public static DataTable Search(string CTS)
{
if (con.State != ConnectionState.Open) con.Open();
DT = new DataTable();
scm = new SqlCommand(CTS, con);
da = new SqlDataAdapter(scm);
scb = new SqlCommandBuilder(da);
da.Fill(DT);
return (DT);
}
public static DataTable I_U_D(string CTS, string CTSIDU)
{
if (con.State != ConnectionState.Open) con.Open();
DT = new DataTable();
scm = new SqlCommand(CTS, con);
da = new SqlDataAdapter(scm);
scb = new SqlCommandBuilder(da);
da.Fill(DT);
scm.CommandText = CTSIDU;
scm.ExecuteNonQuery();
return (DT);
}
}
}

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



connection.Search("select * from phbook where name like N'" + textBox1.Text + "%'");
dataGridView1.DataSource = connection.DT;

و برای اضا فه کردن





connection.DT = connection.I_U_D("select * from phbook", "Insert Into phbook(name,fname,address,opphone) Values('" + name.Text + "','" + textBox4.Text + "','" + textBox13.Text + "','" + textBox5.Text + "','";
MessageBox.Show("اطلاعات باموفقیت ثبت گردید");

hakim22
جمعه 19 آبان 1391, 21:12 عصر
من از Strongly Typed Dataset استفاده میکنم. همونی که خود CS میسازه از طریق Wizard و بعد به کد پس زمینه ای که میسازه میروم و مواردی رو که دلم میخواد عوض می کنم. و اگر متد جدیدی لازم داشته باشم همونجا اضافه می کنم. اگر به کد پس زمینه بروید میبیند که خودش همه ی دستورات select و اینها رو نوشته و دلیلی نداره دوباره کاری کنم.
اما خوندن چند هزار خط کد ممکنه برای بعضی ها خوشایند نباشه.

من در چند سال اخیر همه ی پروژه هام رو با همین روش نوشتم و هیچوقت به مشکل برخورد نکردم.

viv.ninga
جمعه 19 آبان 1391, 21:21 عصر
از نظر من باری فهمیدن بهترین روش باید زیاد با روش ها کار کرد برای تمرین هم که شده همه روش ها رو استفاده کنید.

masoodz
شنبه 20 آبان 1391, 00:11 صبح
سلام دوست من . منم یه کلاس واسه این کار نوشتم بصضورت زیر هست که دارای سه تابع است . تابع اول واسه دستورهای insert و update هست . دومی برای دستورات select و سومی برای کار با دیتا گرید ویو و ... هست . خیلی کدمه کم کرده . به نظر من بهترین شیوه همین هست


http://adsl-h3z.net/images/class.bmp

KhanDaii
دوشنبه 22 آبان 1391, 22:06 عصر
دو ست عزیز من یه کلاسی نوشتم که کاربر تو برنامه فقط یک خط کد مینویسه برای حذف - اضافه - ویرایش و جستجو اینم نمونش خدمتشما
کد
و اینم نحوه استفادش
برای جستجو و نمایش در دیتا گردی
و برای اضا فه کردن

این کد ها برای Access هست . دوست عزیز می تونی برای SQLSERVER هم زحمتش رو بکشی؟
با تشکر

sgh_programer
دوشنبه 22 آبان 1391, 22:42 عصر
سلام به همگی
اگه توجه کرده باشی هر یک از دوستان یه روشی خاصی را برای این کار انتخاب کردند
و هرکدوم برای راحتی کار خودشون این کار رو کردن
من هم یه کلاس واسه خودم نوشتم و از اون استفاده میکنم
به نطر من همه روش دوستان خوبه و شما هم باید یه روش برای خودت انتخاب کنی (با هر کدوم که راحت تری)

در پناه برنامه نویس هستی موفق سربلند باشید

Felony
سه شنبه 23 آبان 1391, 04:22 صبح
به نطر من همه روش دوستان خوبه و شما هم باید یه روش برای خودت انتخاب کنی (با هر کدوم که راحت تری)
نظرتون اشتباه هست ، هیچ کدوم از نمونه کلاس های قرار داده شده در این تاپیک کاربردی نیست ، که چی اون کلاس ها نوشته شدن ؟ 4 تا متد دارن که بهشون Query پاس داده میشه و یک Table بر میگردونه و ... ؟!
به جای Query های مستقیم تو برنامه باید از Stored Procedure های سمت سرور استفاده بشه ، اگر هم قرار هست کلاسی نوشته بشه باید بر پایه Object Modeling باشه ، کتاب Pattern of enterprise application architecture میتونه در مورد پیاده سازی ORM ها بهتون کمک کنه .

موفق باشید .

masoodz
سه شنبه 23 آبان 1391, 18:00 عصر
پست 8 رو یه نگاه بنداز - این کد برای sql هستش و دستورات رو خیلی کاهش میده
این کد ها برای Access هست . دوست عزیز می تونی برای SQLSERVER هم زحمتش رو بکشی؟
با تشکر

Cybersilent
پنج شنبه 02 آذر 1391, 09:22 صبح
جستجو کنید :
Entity Framework
NHibernate