PDA

View Full Version : سوال: نوشتن SqlConnection در کلاس



vB.N3T
شنبه 27 آبان 1391, 14:55 عصر
سلام
دوستان ما تو برنامه وقتی میخوایم insert . delet update کنیم باید وصل بشیم به دیتابیس هر دفعه هم باید
SqlConnection
تعریف کنیم
چطور باید اینو تو یه کلاس بنویسیم و هر دفعه ازش استفاده کنیم

s3rv3r
شنبه 27 آبان 1391, 15:01 عصر
منظورت فقط ساخت خود کانکشن هست یا باز و بسته کردن ارتباط؟


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


namespace MyCompany.Class
{
public class DBConnection
{
public static string strConnectionString;

SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();

public void connect()
{
conn.ConnectionString = strConnectionString;


cmd.Connection = conn;
conn.Open();
}

public DataTable select(string ct)
{
cmd.CommandText = ct;
da.SelectCommand = cmd;
da.Fill(dt);
return dt;
}

public void DoCommand(string command)
{
cmd.CommandText = command;
cmd.ExecuteNonQuery();

}
public void DisConnect()
{
conn.Close();
}

}
}


استفاده در برنامه


DBConnection mydbcon = new DBConnection;
mycbcon.connect();
mydbcon.DoCommand("delete * from users where id=1");
mydbcon.disconnect();

RIG000
شنبه 27 آبان 1391, 15:03 عصر
public class Access
{

// این متد جهت درج اطلاعات است که یک پارامتر دارد
public static void insert(string strInsert)
{
// مشخص کرده ایمdatabaseaddress است در ضمن ما ادرس دیتابیس خود را در con بنام OleDbConnection شی ایجاد شده از کلاس
using (OleDbConnection con = new OleDbConnection(databaseAddress))
{
// شی میگوید ادرسی در تو وجود دارد را بازکن
con.Open();
// Con و مسیری که در شی کانکشنمان وجود دارد بنام sql ایجاد میکن و دو پارامتر می گیرد یکی متنی جهت درج اطلاعات همان دستورات cmd یک شی بنام OleDbCommand کلاس
OleDbCommand cmd = new OleDbCommand(strInsert, con);
// مدیریت خطا
try
{
// دستورات خود را اعمال کنید اگه خطایی نباشد برنامه اجرا می شود ExecuteNonQueryپس از گرفتن ادرس و دستورات و ...شما با متد
cmd.ExecuteNonQuery();

MessageBox.Show("اطلاعات با موفقیت ذخیره شد");

}
// اگر برنامه به هر دلیلی درست کار نکند به این بخش می اید ازجایی که مدریرت را درست انجام داداهام تنها یک خطا وارد این برنامه است ن هم که پیغامش در پایین میبینید
catch
{
MessageBox.Show("این شماره قبلا ثبت شده است ");
}
// بانک را ببند
con.Close();

}
}
// قرار گرفته شده است ومابقی همان است strupdateاست که در update اینم تد تنها تفاوتش همین دستور
public static void Update(string strUpdate)
{
using (OleDbConnection con = new OleDbConnection(databaseAddress))
{
con.Open();

OleDbCommand cmd = new OleDbCommand(strUpdate, con);

try
{
cmd.ExecuteNonQuery();
MessageBox.Show("اطلاعات با موفقیت ویرایش شد");

}

catch (Exception er)
{

MessageBox.Show("این کد قبلا ثبت شده است ");
MessageBox.Show(er.Message);

}

finally
{
con.Close();
}



}
}

vB.N3T
شنبه 27 آبان 1391, 15:12 عصر
ممنون عالی بود
مثلا من برنامه رو برای insert این شکلی مینویسم
میشه اینو بهینه تر نوشت

SqlConnection con1 = new SqlConnection();
con1.ConnectionString = "server=localhost;database=oo;integrated security = true";
con1.Open();

SqlCommand com1 = new SqlCommand();
com1.Connection = con1;
com1.CommandText=" insert into tb1 (id,name,fname ) values (@id,@name,@fname)";
com1.Parameters.AddWithValue("@id", textBox1.Text);
com1.Parameters.AddWithValue("@name", textBox2.Text);
com1.Parameters.AddWithValue("@fname", textBox3.Text);

com1.ExecuteNonQuery();

s3rv3r
شنبه 27 آبان 1391, 15:31 عصر
خب میتونی تو یه کلاس بنویسی ازش استفاده کنی تا در فرمت فقط فراخوانی داشته باشی.


public void insert(string id, string name , string fname)
{
SqlConnection con1 = new SqlConnection();
con1.ConnectionString = "server=localhost;database=oo;integrated security = true";
con1.Open();

SqlCommand com1 = new SqlCommand();
com1.Connection = con1;
com1.CommandText=" insert into tb1 (id,name,fname ) values (@id,@name,@fname)";
com1.Parameters.AddWithValue("@id", id);
com1.Parameters.AddWithValue("@name", name);
com1.Parameters.AddWithValue("@fname", fname);

com1.ExecuteNonQuery();


}
استفاده در برنامه


classFunc mycls = new classFunc();
mycls.insert(textbox1.text,textbox2.text,textbox3. text);

vB.N3T
شنبه 27 آبان 1391, 17:56 عصر
اینم روش خیلی خوبی بود

حالا این قسمت تو همشون ثایت هست دیگه

SqlConnection con1 = new SqlConnection();
con1.ConnectionString = "server=localhost;database=oo;integrated security = true";
con1.Open();

من اومدم اینو تو یه کلاس این شکلی نوشتم

public void con1h()
{
SqlConnection con1 = new SqlConnection();
con1.ConnectionString = "server=localhost;database=oo;integrated security = true";
con1.Open();


}

و تو فرم این شکلی ازش استفاده میکنم

ins n = new ins();
n.con1h();
SqlCommand j = new SqlCommand();
j.Connection = n.con1h();

اما خطا میده

دلیلش چیه؟
میگه نمیشه کانکشن استرینگ خط اول رو با کلاس نوشت؟؟؟

vB.N3T
شنبه 27 آبان 1391, 19:20 عصر
اقای s3rv3r پست اول شما خوب بود به کارم اومد ولی شما
با استفاده از این خط
mydbcon.DoCommand("delete * from users where id=1");

از تو جدول ردیفی که ایدیش 3 هست رو پاک کردید
حالا اگه بخواهیم یه تکس باکس داشته باشیم و کاربر ایدی رو وارد کنه و برنامه دلت کنه باید چیکار کرد

RIG000
شنبه 27 آبان 1391, 19:57 عصر
مثلا" میتونی ایجوری بنویسی

string strDelete = String.Format("delete from Tell where id='{0}'",textbox.text);

vB.N3T
شنبه 27 آبان 1391, 20:07 عصر
منظور شما از کد بالا چیه ؟؟ اینو تو دو کامنت بنویسم ؟؟؟میشه ؟

mhq1368
شنبه 27 آبان 1391, 20:22 عصر
شما میتونید کانکشن استرینگتون رو خارج از تابع تو خود کلاس تعریف کنید بعد تو تابعی که تو کلاس تعریف کردین فقط open ش کنید

s3rv3r
شنبه 27 آبان 1391, 20:31 عصر
من معمولا کانکشن استرینگ و چیزایی که تو کل برنامه هام استفاده میکنم تو یه کلاس به اسم pubclass اینجوری تعریف میکنم


public static string constring="...";

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


pubclass.constring

اگه میگفتی چه خطایی بهتره کمکت میکردم.

RIG000
شنبه 27 آبان 1391, 20:41 عصر
مثلا" میتونی ایجوری بنویسی

string strDelete = String.Format("delete from users where id='{0}'",textbox.text);

شما اگه طبق کد های
s3rv3r (http://barnamenevis.org/member.php?171807-s3rv3r)
پیش میرید آره . شما تو یه متغییر مقدار خودتو بنویس همین strDelete مثلا". سپس
mydbcon.DoCommand( strDelete);