我从Sql server和mysql数据库中获取表,列,所以我有一些代码重复。
我想保留一个常用功能,我想处理mysql和sql server连接(打开和关闭)以及处理连接对象。
这是我获取Mysql和ms sql表的常用函数:
public List<Tables> GetTables(string databaseName, string connectionString, string type)
{
var list = new List<Tables>();
if (type == 'mysql')
{
using (MySqlConnection con = new MySqlConnection(connectionString))
{
con.Open();
list = con.GetSchema("Tables").AsEnumerable()
.Select
(
t => new Tables
{
Name = t["TABLE_SCHEMA"].ToString() + "." + t[2].ToString()
}
).ToList();
con.Close();
}
}
else
{
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
list = con.GetSchema("Tables").AsEnumerable()
.Select
(
t => new Tables
{
Name = t["TABLE_SCHEMA"].ToString() + "." + t[2].ToString()
}
).ToList();
con.Close();
}
}
return list;
}
所以我上面有代码重复,并且在获取列时也是如此:
public List<Columns> GetColumns(string connectionString, string database, string table, string type)
{
if (type == 'mysql')
{
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
con.Open();
var list = conn.GetSchema("Columns", columnRestrictions).AsEnumerable()
.Select
(
col => new
{
//column details
}
).ToList();
conn.Close();
}
}
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
var list = conn.GetSchema("Columns", columnRestrictions).AsEnumerable()
.Select
(
col => new
{
//column details
}
).ToList();
conn.Close();
return list;
}
return null;
}
}
那么任何人都可以指导我如何避免上面的代码重复并保留1个常用功能,它将打开和关闭连接以及配置连接对象,以便我可以在获取表和列时调用它?
答案 0 :(得分:2)
]runtime '0 100 100 100 100 100 1000.0⊥⎕TS' '0 100 100 100 100 100 1000⊥⎕TS' -compare -repeat=500000
0 100 100 100 100 100 1000.0⊥⎕TS → 4.6E¯7 | 0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
0 100 100 100 100 100 1000⊥⎕TS → 4.3E¯7 | -7% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
和MySqlConnection
都继承自DbConnection。
SqlConnection
我假设您需要在同一个应用程序中同时使用这两个连接,并且它不仅仅是&#34;以防我需要切换数据库提供程序&#34;。典型的是,您将为每个数据库类型创建一个实现,并通过接口抽象出来。
答案 1 :(得分:0)
可能你应该在一个单独的函数中封装连接的创建而只是它。