2011-09-08 2 views
2

이걸 사용하여 SQL 데이터베이스에 연결합니다.어떻게 SQL 연결을 별도의 클래스에 넣을 수 있습니까? C#

namespace WindowsFormsApplication1 
{ 
    public partial class InvoiceGUI : Form 
    { 
     System.Data.SqlClient.SqlConnection con; 
     System.Data.SqlClient.SqlDataAdapter da; 
     DataSet ds1; 
     DataRow dRow; 

     int MaxRows = 0; 
     int inc = 0; 

     public InvoiceGUI() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      con = new System.Data.SqlClient.SqlConnection(); 
      ds1 = new DataSet(); 

      con.ConnectionString = "Data Source=(local);Initial Catalog=invoice_db;Integrated Security=SSPI"; 

      con.Open(); 
      //MessageBox.Show("open"); 

      string sql = "select * from invoice"; 
      da = new System.Data.SqlClient.SqlDataAdapter(sql, con); 

      da.Fill(ds1, "Invoice"); 
      NavigateInvoice(); 

      //Set the max rows 
      MaxRows = ds1.Tables["Invoice"].Rows.Count; 

      con.Close(); 
      //MessageBox.Show("closed"); 

     } 

어떻게 연결을 별도의 클래스로 이동하고 다른 클래스 (Windows 양식)에서 데이터베이스에 액세스합니까?
가 나는

나에게 당신은 항상 데이터 액세스와 같은 클래스/DLL을 분리해서하는 데이터 액세스를 관련 코드를 이동해야

+0

Xtreme, 최소한 당신은 DAT (Data Access Layer)라고 부를 수있는 분리 된 클래스 라이브러리 프로젝트를 작성해야합니다. 이것은 Windows Forms 애플리케이션의 동일한 솔루션 안에있을 수 있습니다. SQL 연결은 거기서 만 생성되고 소비되어야하며, 테이블 이름이나 저장 프로 시저 이름을 지정할 수있는 공용 메서드가 있으며 거기에서 DataTable을 검색합니다. 이 온라인 및 SO에 대한 많은 기사 ... –

+0

원시 ADO.NET 대신 PetaPoco/Dapper 또는 Massive를 사용하는 것이 좋습니다. –

답변

0

예를주십시오 하나 개의 클래스에 연결을 가지고 전 WindowsForm2에서 도달하는 가장 좋은 것 같아요 층.

고유 한 데이터 액세스 코드를 작성하는 대신 다양한 데이터베이스를 조작하기위한 쉬운 인터페이스와 구성을 제공하는 Enterprise Libray 데이터 액세스 블록/ORM 프레임 워크와 같이 쉽게 사용할 수있는 데이터 액세스 구성 요소를 사용할 수 있습니다.

가 호출 층에 다시 당신이 (대신 데이터 세트의) 엔티티 객체를 데이터 액세스 레이어에서 다음 코드가 작성하고 반환하는 모든 엔터프라이즈 라이브러리를 사용하여 엔터프라이즈 라이브러리 정보 http://entlib.codeplex.com/

에 대한 링크를 참조하거나 UI.

string sSql = "select * from customers"; 
    Database dbNorthwind = DatabaseFactory.CreateDatabase(); 
    DBCommandWrapper cmdCust = dbNorthwind.GetSqlStringCommandWrapper(sSql); 
    DataSet dsCust = dbNorthwind.ExecuteDataSet(cmdCust); 
    dataGrid1.DataSource = dsCust.Tables[0].DefaultView; 

연결 문자열은 구성 파일에서 유지 관리되므로 유연성을 변경할 수 있습니다.

희망이 도움이됩니다. 크리슈나

2

이 시도 : 당신의 프로그램에서

class clsConnectionClass:IDisposable 
{ 
    public SqlConnection cnn; 

    public clsConnectionClass() 
    { 
     if ((cnn = _cnn()) == null) 
     { 
      this.Dispose(); 
     } 
    } 

    private SqlConnection _cnn() 
    { 
     SqlConnection conn = null; 
     string server = "Your server address or name"    
     string db = "Your dadabase name"; 

     cnnString = string.Format("Server={0};Database={1};Trusted_Connection=SSPI;",server,db); 
     try 
     { 
      conn = new SqlConnection(); 
      conn.ConnectionString = cnnString; 
      conn.Open(); 
      return conn; 
     } 
     catch 
     { 
      conn.Dispose(); 
      return null; 
     } 
    } 
    public void Dispose() 
    { 
     if (cnn != null) 
     { 
      cnn.Dispose(); 
     } 
    } 
} 


3.
1. ConnectionClass.cs 그것은에 다음 코드를 넣습니다
2. 예를 들어, 클래스를 만듭니다
클래스는이 클래스의 정적 객체를 만들고 메인에 함수로 초기화합니다.

static class Program 
{ 
    public static SystemParams.clsConnectionClass conn; 
    [STAThread] 
    static void Main() 
    { 
      conn = new SystemParams.clsConnectionClass(); 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Shared.frmMain());   
    } 
} 


이제 Program.conn.cnn 같은 프로그램의 어떤 장소에서이 연결을 사용할 수 있습니다. 친절한 대답이지만 여전히 누군가가 사용할 수 있습니다.