1

C#.

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

我尝试构建一个Public Methodwhich usedMySqlConnection mycon参数并让它 return mycon,但是,在其他按钮中,它将 mycon 视为方法,而不是对象。从那里我尝试了一个Class(使用 dotnetperls 和其他站点的语法),它产生了其他关于类型的错误。显然,作为新手,我正在使用错误的语法来构建 a Classand Method,尽管我假设由于 aMethod将是一个动作,我实际上正在寻找一个将保存对象并允许程序的其他部分的类访问它。

以下面的伪代码为例:

当前的

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

4 回答 4

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 语句 with connection.open

于 2013-06-05T15:18:15.757 回答
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())
    {
    }
}
于 2013-06-05T15:19:46.877 回答
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()
    }
} 
于 2013-06-05T15:12:47.843 回答
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();
            }
    }
}
于 2013-06-05T15:53:44.693 回答