测试各种rdbms的连接字符串的通用方法
问题描述:
我有不同的数据源,如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;
}
}
}
}
所以没有更好的办法来做到这一点上面的过程?
我会感谢所有帮助:)
答
你可以这样定义一个通用的方法:
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;
}
}
}
这worked.hank你这么多的答案:) –