PDA

View Full Version : سوال: ایجاد یک کلاس sqlconnection



omid_online
شنبه 08 تیر 1392, 12:58 عصر
سلام. من می خوام یک کلاس sql connection تعریف کنم تا در هر فرمی که خواستم به بانک اطلاعاتی متصل بشم نیاز به نوشتن دستورات connection string نباشه و همین کلاس رو فراخوانی کنم لطفا بگید چه جوری این کار رو بکنم فقط در سطح ابتدایی توزیح بدین که من تازه کارم؟ مرسی:متفکر:

omid_online
شنبه 08 تیر 1392, 14:01 عصر
کسی نیست جواب بده مثل اینکه شما از تازه واردها خوشتون نمیاد

vB.N3T
شنبه 08 تیر 1392, 14:05 عصر
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace myproject2
{
class ShopClass
{
SqlConnection con1 = new SqlConnection();


public void connect()
{
con1.ConnectionString = "server=localhost;database=shop;integrated security = true";
com1.Connection = con1;
con1.Open();
}

vB.N3T
شنبه 08 تیر 1392, 14:06 عصر
نمونه سازی هم

ShopClass mydb = new ShopClass();
mydb.connect();



شما به جای shop نام دیتا بیس خودتون بزارید

omid_online
شنبه 08 تیر 1392, 14:32 عصر
مرسیییییییییییییییییییییی یییی

arash691
شنبه 08 تیر 1392, 14:38 عصر
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace myproject2
{
class ShopClass
{
SqlConnection con1 = new SqlConnection();


public void connect()
{
con1.ConnectionString = "server=localhost;database=shop;integrated security = true";
com1.Connection = con1;
con1.Open();
}
بنظرم کلاس باید استاتیک تعریف بشه و در هنگام تخصیص حافظه کد داخل using نوشته بشه ... یه try - catch هم اضافه بشه بد نیس ... همچنین خصوصیاتی مثل یوزر و پسورد - نام سرور و ... هم میشه بهش اضافه کرد که دیگه کامل تر بشه ...

Mosafers
شنبه 08 تیر 1392, 15:43 عصر
ببخشید منم همین مشکل رو دارم ولی از روش EF استفاده میکنم ... من با کد زیر به گرید بایند میکنم مثل روش سنتی نیست یعنی با این کد :

Database db= new Database();
DataGridView1.DataSource=db.table1;

vB.N3T
یک شنبه 09 تیر 1392, 15:01 عصر
در هنگام تخصیص حافظه کد داخل using نوشته بشه??? منظور شما چیه ؟؟؟
بعد میشه کدو کامل کنی استفاده کنیم ؟؟؟
استاتیک باشه بهتره؟؟؟؟؟

Mosafers
جمعه 14 تیر 1392, 16:36 عصر
من در ابتدای هر فرمم باید این کد رو بنویسم میخوام این رو توی یه کلاس قرار بدم اما نشد خطا میده؟؟؟
Database db= new Database();

davidrobert
جمعه 14 تیر 1392, 18:21 عصر
بفرمائید این دستور sqlconnection در داخل کلاس دیگه نیاز نیست هی کانکشن بسازید یک بارید میسازید و به دفعات دیتابیستون رو صدا میزنید.using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace Bername_Hesabdare_SayeBan_Poshak
{
class DataAccess
{
public static bool ShowFriendMessage = false;
public static string Server = "";
public static string DataBase = "";
public static string UserName = "";
public static string Password = "";
public static bool isExpress = true;
public DataTable dt;
public SqlConnection con;
public SqlCommand cmd;
public SqlDataAdapter da;
public SqlCommandBuilder cb;
public DataSet ds;
public string LastError = "";


public DataAccess()
{
try
{

con = new SqlConnection();
cmd = new SqlCommand();
da = new SqlDataAdapter();
cb = new SqlCommandBuilder();
dt = new DataTable();
ds = new DataSet();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshakSayeBan.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
cmd.Connection = con;
da.SelectCommand = cmd;
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError += ex.Message;
else
LastError += "اشکال ار در ارتباط با دیتابیس";
}
}
public string cs = "";

public void Connect()
{
try
{

if (isExpress)
{
cs = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DbPoshakSayeBan.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
}
else
{
cs = @"server=" + Server + ";database=" + DataBase + ";trusted_connection=yes;";
//cs = @"server=" + server + ";database=" + database + ";uid=" + user + ";pwd=" + password + ";";
}
con.ConnectionString = cs;
con.Open();
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError = ex.Message;
else
LastError += "اشکال در ارتباط با دیتابیس / با مدیر برنامه تماس حاصل فرمایید.";
}
}

public void Disconnect()
{
con.Close();
}
public DataTable select(string sql)
{

try
{
cmd.CommandText = sql;
da.Fill(dt);
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError = ex.Message;
else
LastError += "خطا در خواندن اطلاعات.";
}
return dt;
}
public void DoCommand(string sql)
{
try
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
if (!ShowFriendMessage)
LastError += ex.Message;
else
LastError += " خطا در اجرا دستورات.";
}
}

public DataTable Search(string CTS)
{
if (con.State != ConnectionState.Open) con.Open();
dt = new DataTable();
cmd = new SqlCommand(CTS, con);
da = new SqlDataAdapter(cmd);
cb = new SqlCommandBuilder(da);
da.Fill(dt);
return (dt);
}
public DataTable I_U_D(string CTS, string CTSIDU)
{
if (con.State != ConnectionState.Open) con.Open();
dt = new DataTable();
cmd = new SqlCommand(CTS, con);
da = new SqlDataAdapter(cmd);
cb = new SqlCommandBuilder(da);
da.Fill(dt);
cmd.CommandText = CTSIDU;
cmd.ExecuteNonQuery();
return (dt);
}
}
}
موفق باشید.

Mosafers
جمعه 14 تیر 1392, 19:18 عصر
سلام ببخشید ولی من از EF استفاده میکنم و این موارد رو نداره .
در هر فرم من باید ابتدا این رو برای اتصال به دیتابیس تعریف کنم تعریف هم به شکل زیر است :

Database db= new Database();

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