C#:构建连接的类/方法

时间:2013-06-05 15:09:01

标签: c#

C#全新。

在我的应用中,有几个按钮会连接到MySql并传递信息。每个按钮都有自己的连接字符串,我觉得这是多余的,如果在C#中有一种方法来构建ClassMethod,保持连接字符串,并在每个按钮中调用连接,这很奇怪而不是建立连接,然后调用它。

我尝试构建使用Public Method参数的MySqlConnection mycon并让它返回mycon,但是,在其他按钮中,它将mycon视为方法,而不是对象。从那里我尝试了Class(使用来自dotnetperls和其他网站的语法),这已经产生了关于类型的其他错误。很明显,对于这个新手,我接近错误的语法来构建ClassMethod,虽然我假设因为Method将是一个动作,我实际上在寻找一个类,它将保存对象并允许程序的其他部分访问它。

参见下面的伪代码作为例子:

当前

private void button1_Click(object sender, EventArgs e)
{

MySqlConnection mycon = new MySqlConnection();
mycon.ConnectionString = "Connection";

mycon.Open();
// Code
mycon.Close();

}

private void button2_Click(object sender, EventArgs e)
{

MySqlConnection mycon = new MySqlConnection();
mycon.ConnectionString = "Connection";

mycon.Open();
// Code
mycon.Close();

}

private void button3_Click(object sender, EventArgs e)
{

MySqlConnection mycon = new MySqlConnection();
con.ConnectionString = "Connection";

mycon.Open();
// Code
mycon.Close();

}

目标:

Some Class
{

//MySqlConnection parameters establish mycon

}

private void button1_Click(object sender, EventArgs e)
{

mycon.Open();
// Code
mycon.Close();

}

private void button2_Click(object sender, EventArgs e)
{

mycon.Open();
// Code
mycon.Close();

}

private void button3_Click(object sender, EventArgs e)
{

mycon.Open();
// Code
mycon.Close();

}

注意:我知道XML方法(并在我的另一个程序中使用过它),但我正在尝试查看是否有Class/Method方法。

4 个答案:

答案 0 :(得分:3)

我建议有一个方法(可能是静态的,存在于代码中任何地方都可访问的地方),它处理获取连接的所有细节,并返回它。然后,只要您需要连接,请调用该方法。

class SomeClass
{
    private void button1_Click(object sender, EventArgs e)
    {
        using (var conn = Utilities.GetConnection())
        {
            conn.Open();
            // Code
        }
    }
}
public static class Utilities
{
    public static MySqlConnection GetConnection()
    {
        MySqlConnection conn = new MySqlConnection();
        conn.ConnectionString = "Connection";
        return conn;
    }
}

并使用using确保连接始终关闭。对于您使用的任何IDisposable,这通常是一种很好的做法。

有关Open()是否应在GetConnection()内的某些信息/讨论,请参阅using statement with connection.open

答案 1 :(得分:3)

使用静态方法创建连接,并使用using速记来关闭/处理它:

SomeClass
{
   public static MySqlConnection CreateConnection()
   {
       MySqlConnection mycon = new MySqlConnection();
       mycon.ConnectionString = "Connection";
       mycon.Open();
       return mycon;
   }
}

private void button1_Click(object sender, EventArgs e)
{
    using (MySqlConnection conn = SomeClass.CreateConnection())
    {
    }
}

答案 2 :(得分:1)

class SomeClass : IDisposable
{
    SqlConnection conn;

    public SomeClass
    {
        conn = new SqlConnection("some connectionstring");
    }

    public void Open()
    {
        conn.Open()
    }

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

    public void Dispose()
    {
        conn.Dispose()
    }
} 

答案 3 :(得分:0)

我会做这样的事情:

public class DataBase
{
    private static string DEFAULT_CONNECTION_STRING = "*your connection string*";
    private string connectionString;
    private DbProviderFactory factory;

    public DataBase()
    {
            connectionString = DEFAULT_CONNECTION_STRING;
            factory = DbProviderFactories.GetFactory("MySql.Data.MySql");
    }

    public IDataReader GetData(string sql)
    {
            using(var conn = factory.CreateConnection())
            using(var command = factory.CreateCommand())
            {
                    command.CommandText = sql;
                    command.CommandType = CommandType.Text;
                    conn.ConnectionString = this.connectionString;
                    conn.Open();
                    command.Connection = conn;
                    return cmd.ExecuteReader();
            }
    }
}