2017-05-09 63 views
2

我有不同的數據源,如mysql,sql server和oracle,並且對於每個數據源,我將基於連接字符串測試與服務器的握手是否成功。測試各種rdbms的連接字符串的通用方法

所以我創建了3個類,每個這個類將有一個方法來測試連接字符串,但代碼是相同的,所以我在想,是否有可能創建1個通用方法來處理所有3個數據源如mysql,sql server和oracle,這樣我就不必爲每個數據源創建3個方法來測試連接字符串。

下面是我的代碼:

public class ConnectionViewModel 
    { 
     public string RdbmsType { get; set; } 
     public string ConnectionString { get; set; } 
    } 

[HttpPost] 
     public ActionResult RdbmsServerHandshake(ConnectionViewModel model) 
     { 
      if (model.RdbmsType =="Mysql") 
       { 
        var mySqlRepo = new MysqlRepository(); 
        var test = mySqlRepo.TestConnectionString(model.ConnectionString); 
       } 
       else if(model.RdbmsType == "SqlServer") 
       { 
        var sqlServerRepo = new SqlServerRepository(); 
        var test = sqlServerRepo.TestConnectionString(model.ConnectionString); 
       } 
       else // for oracle 
       { 
        // code for oracle 
       } 
     } 

    public class SqlServerRepository 
    { 
     public bool TestConnectionString(string connectionString) 
     { 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       try 
       { 
        connection.Open(); 
        return true; 
       } 
       catch (SqlException) 
       { 
        return false; 
       } 
      } 
     } 
    } 

    public class MysqlRepository 
    { 
     public bool TestConnectionString(string connectionString) 
     { 
      using (MySqlConnection connection = new MySqlConnection(connectionString)) 
      { 
       try 
       { 
        connection.Open(); 
        return true; 
       } 
       catch (SqlException) 
       { 
        return false; 
       } 
      } 
     } 
    } 

所以沒有更好的辦法來做到這一點上面的過程?

我會感謝所有幫助:)

回答

2

你可以這樣定義一個通用的方法:

static bool TestConnectionString<T>(string connectionString) where T : DbConnection, new() 
{ 
    using (DbConnection connection = new T()) 
    { 
     connection.ConnectionString = connectionString; 

     try 
     { 
      connection.Open(); 
      return true; 
     } 
     catch (SqlException) 
     { 
      return false; 
     } 
    } 
} 
+0

這worked.hank你這麼多的答案:) –