PDA

View Full Version : استفاده از کلاس عمومی برای اتصال به database



baranbahari1320
جمعه 25 دی 1394, 14:37 عصر
با سلام.به نظر دوستان می توان یک کلاس عمومی برای دسترسی به پایگاه تعریف کرد که کلیه کارهای اتصال،درج،انتخاب،حذف و آپدیت رو توش نوشت و در هر فرم با فراخوانی آن کلاس و ارسال پارامتر به آن عمل مورد نظر رو انجام داد ولی از خاصیت پارامتر استفاده کرد برای جلوگیری از sqlinjection.ضروری نیاز دارم دوستان راهنمایی بفرمایند ممنون میشم.خودم کلاس رو نوشتم ولی با پارامتر نیست.

juza66
جمعه 25 دی 1394, 15:50 عصر
سلام

کلاست رو بذار تا دوستان ببینند و اصلاح کنیم.

منم چنین کلاسی رو برای تحت وب نوشته بودم که با مشکل sql injection مواجه شدم. ولی برنامه های تحت ویندوزم چون دست یکی دونفر بود خیالم راحت بود چون نمیدونستند چیه ولی چون بردم تحت وب کار کردم با مشکل روبرو شدم و مجبور شدم mvc کار کنم و تویی لایه کنترل کلاسم رو نوشتم و تا الانم مشکلی نداشتم.

khokhan
جمعه 25 دی 1394, 19:05 عصر
با سلام.به نظر دوستان می توان یک کلاس عمومی برای دسترسی به پایگاه تعریف کرد که کلیه کارهای اتصال،درج،انتخاب،حذف و آپدیت رو توش نوشت و در هر فرم با فراخوانی آن کلاس و ارسال پارامتر به آن عمل مورد نظر رو انجام داد ولی از خاصیت پارامتر استفاده کرد برای جلوگیری از sqlinjection.ضروری نیاز دارم دوستان راهنمایی بفرمایند ممنون میشم.خودم کلاس رو نوشتم ولی با پارامتر نیست.

که به این کلاس اصطلاحا sqlhelper class گفته می شه

juza66
شنبه 26 دی 1394, 01:47 صبح
سلام اقای خوخان

لطفا نحوه ارسال کوئری را به کلاس رو با یک مثال کوچیک شرح میدید؟ ممنون

baranbahari1320
شنبه 26 دی 1394, 11:46 صبح
ببخشید آقای خوخان یعنی هر بار باید connection string و سایر پارارمترها ارسال بشن اگر اینجوری باشه من منظورم این نبود.
یه نمونه از کلاسمو میذارم شاید سوال من ایراد داشته باشه.ولی باز ممنون از راهنماییتون.




class DataAccess
{
public string username;
public string password;
SqlConnection scon;
SqlCommand scom;
SqlDataAdapter sda;

public DataAccess()
{
scon = new SqlConnection();
scom = new SqlCommand();
sda = new SqlDataAdapter();
scom.Connection = scon;
sda.SelectCommand = scom;

}
public void connect()
{
scon.ConnectionString = "Server=(local);database=library;Integrated Security=true;"
scon.Open();



}
public void disconnect()
{
scon.Close();
}

public DataTable select(String Sql)

{
DataTable dbt = new DataTable();

scom.CommandText = Sql;
sda.Fill(dbt);
return dbt;

}



public void isrcom(string Sql)
{
scom.CommandText = Sql;

scom.ExecuteNonQuery();
}
این کلاس عمومی منه به اینصورت هم براش مقدار ارسال میکنم




DataAccess sda = new DataAccess();
sda.connect();
string Sql = "select * from user1 WHERE username='{0}' and password='{1}'";
Sql = string.Format(Sql,
txtu.Text.Replace("'", "''"),
txtp.Text.Replace("'", "''"));
DataTable dbt = new DataTable();
dbt = sda.select(Sql);
sda.disconnect();




من میخوام بدون اینکه مجبور بشم هر بار کلیه دستورات مربوط به اتصال به پایگاه و عملیات مختلف رو برای هر متد بنویسم یه کلاس مثل بالا داشته باشم ولی به جای استفاده از string.format بتونم از
cmd.parametrs.value=@مقدار استفاده کنم آیا این کار امکانپذیره یا نه.

juza66
شنبه 26 دی 1394, 12:13 عصر
سلام اره امکان پذیره

Helpco
شنبه 26 دی 1394, 12:18 عصر
آقا این کلاس برای کار با SQLite هم میشه استفاده کرد؟
کلاسی برای کار با SQLite هست؟

baranbahari1320
شنبه 26 دی 1394, 12:28 عصر
سلام اره امکان پذیره

میشه راهنمایی بفرمایین؟

khokhan
شنبه 26 دی 1394, 12:53 عصر
ببخشید آقای خوخان یعنی هر بار باید connection string و سایر پارارمترها ارسال بشن اگر اینجوری باشه من منظورم این نبود.
یه نمونه از کلاسمو میذارم شاید سوال من ایراد داشته باشه.ولی باز ممنون از راهنماییتون.

اون کلاسی که من براتون ارسال کردم توی هر پروژه ای می تونی استفاده کنی و نیازی به به تنظیم مجدد رشته اتصال و این حرفها هم نیست
تنها با یه دونه کلاس قادرین تمام جداولتون رو مدیریت کنین
و مزیت بزرگ دیگه ای که داره کدنویسی رو تا یک سوم کاهش می ده

khokhan
شنبه 26 دی 1394, 13:02 عصر
آقا این کلاس برای کار با SQLite هم میشه استفاده کرد؟
کلاسی برای کار با SQLite هست؟
برای sqlite از این کلاس استفاده کنین
فراخوانی اطلاعات با استفاده از کلاس:

dbHelpercs sh = new dbHelpercs();
DataTable dt = sh.Select("select * from person order by id;");
dataGridView1.DataSource = recipe;

ثبت رکورد یا رکورد های جدید :


dbHelpercs sh = new dbHelpercs();
var dic = new Dictionary<string, object>();
dic["name"] = "John";
dic["membershipid"] = 1;
dic["level"] = 6.8;

sh.Insert("person", dic);


برای ویرایش :



dbHelpercs sh = new dbHelpercs();
var dicData = new Dictionary<string, object>();
dicData["name"] = "no name";
dicData["membershipid"] = 0;
dicData["level"] = 5.5;

sh.Update("person", dicData, "id", 1);


و الی آخر