【发布时间】:2016-12-15 07:46:40
【问题描述】:
我正在从 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 个通用函数,该函数将打开和关闭连接以及处理连接对象,以便我可以在获取表和列时调用它??
【问题讨论】:
标签: c# .net sql-server linq ado.net