Общий способ проверки строки подключения различных rdbms
У меня разные источники данных, такие как MySQL, SQL Server и Oracle, и для каждого источника данных я буду проверять, является ли успешным рукопожатие с сервером или нет на основе строки подключения.
Итак, я создал 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;
}
}
}
Вы должны закрыть соединение. В противном случае вы будете продолжать открывать соединения и оставлять их открытыми. Подобно ответу Алессандро, но с близким, включенным в код:
static bool TestConnectionString<T>(string connectionString) where T : DbConnection, new()
{
using (DbConnection connection = new T())
{
connection.ConnectionString = connectionString;
try
{
connection.Open();
connection.Close();
return true;
}
catch (SqlException)
{
return false;
}
}
}