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

本文关键字:方法 连接 构建 | 更新日期: 2023-09-27 18:17:08

C#完全陌生。

在我的应用程序中,几个按钮将连接到MySql并从它传递信息。每个按钮都有自己的连接字符串,我发现多余的,并且很好奇是否有一种方法在c#中构建ClassMethod,持有连接字符串,并在每个按钮中调用连接,而不是建立连接,然后调用它。

我尝试构建一个使用MySqlConnection mycon参数的Public Method,并让它返回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方法。

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

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

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

使用静态方法创建连接,并使用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())
    {
    }
}
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()
    }
} 

我会这样做:

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();
            }
    }
}