Я думаю, у меня прямой вопрос. Я пишу систему, которая позволяет пользователям из компании A осуществлять единый вход в систему, и для этого я возвращаюсь к центральной базе данных пользователей в компании A и проверяю учетные данные, переданные мне.
В настоящее время моя реализация включает построение моего запроса с использованием строителя строк, а затем передачу строки в виде текста команды. Мой вопрос Есть ли лучший способ сделать это. ниже мой код;
public User LoginSSO(string UserName, Int32 sectorCode)
{
using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ComapnyA"].ConnectionString))
{
con.Open();
StringBuilder sb = new StringBuilder();
sb.AppendLine("Select mx.Id, mx.UserName, mx.firstname,mx.surname,mx.sectorCode,");
sb.AppendLine("mx.deleteFlag, dn.sectorGroupCode, dn.region, dn.district");
sb.AppendLine("from users mx");
sb.AppendLine("Inner Join sector dn on dn.sectorCode = mx.sectorCode");
sb.AppendLine("Where (mx.UserName = '{0}')");
string commandText = string.Format(sb.ToString(), UserName, sectorCode);
using (OdbcCommand comm = new OdbcCommand(commandText, con))
{
using (OdbcDataReader reader = comm.ExecuteReader())
{
if (reader.Read())
{
User user = new User();
user.Id = Convert.ToInt32(reader["Id"]);
user.Username = Convert.ToString(reader["UserName"]);
user.Firstname = Convert.ToString(reader["firstname"]);
user.Surname = Convert.ToString(reader["surname"]);
_dealerGroupCode = Convert.ToString(reader["sectorGroupCode"]);
_region = Convert.ToInt32(reader["region"]);
_district = Convert.ToInt32(reader["district"]);
_dealerCode = dealerCode;
_accessLevel = AccessLevel.Sector;
return user;
}
}
}
}
return null;
}
Мне не нравится тот факт, что я создаю свой sql, который в конечном итоге является статическим скриптом. Обратите внимание, что я не могу каким-либо образом управлять удаленным сервером или добавлять к нему какие-либо хранимые процедуры. Для остальной части приложения я использовал LINQ, но я предполагаю, что это не вариант.