避免代码重复的常用功能,用于处理2种不同类型的对象

时间:2016-12-15 07:46:41

标签: c# .net sql-server linq ado.net

我从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个常用功能,它将打开和关闭连接以及配置连接对象,以便我可以在获取表和列时调用它?

2 个答案:

答案 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)

可能你应该在一个单独的函数中封装连接的创建而只是它。