如何将SQL连接放在单独的类中? C#

时间:2011-09-08 10:06:43

标签: c# class sqlconnection

我用它来连接我的SQL数据库。

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窗体)访问我的数据库? 我想最好将连接放在一个类中,并从前WindowsForm2

中获取

请举个例子

2 个答案:

答案 0 :(得分:2)

试试这个:
1.创建类,例如 ConnectionClass.cs
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.在程序类中创建此类的静态对象,并在 Main 函数中初始化它。

  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 。 这是一个古老的答案,但仍然有人可以使用它。

答案 1 :(得分:0)

您应始终将与数据访问相关的代码移动到单独的类/ dll,如数据访问层。

您可以使用现成的数据访问组件(如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; 

连接字符串将在配置文件中维护,因此您可以灵活地更改它。

希望这会有所帮助。 克里希纳