C#
全新。
在我的应用中,有几个按钮会连接到MySql
并传递信息。每个按钮都有自己的连接字符串,我觉得这是多余的,如果在C#中有一种方法来构建Class
或Method
,保持连接字符串,并在每个按钮中调用连接,这很奇怪而不是建立连接,然后调用它。
我尝试构建使用Public Method
参数的MySqlConnection mycon
并让它返回mycon
,但是,在其他按钮中,它将mycon视为方法,而不是对象。从那里我尝试了Class
(使用来自dotnetperls和其他网站的语法),这已经产生了关于类型的其他错误。很明显,对于这个新手,我接近错误的语法来构建Class
和Method
,虽然我假设因为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
方法。
答案 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();
}
}
}