В сообщении об ошибке совершенно четко говорится, что ваше соединение не открыто в то время, когда вы пытаетесь запустить программу чтения данных.
По сути, я бы рекомендовал полностью переписать ваш метод GetCustomerByUsername
- используйте блоки using(...) { ... }
в качестве лучшей практики для ваших SqlConnection
и SqlCommand
- что-то вроде этого:
public static ICustomer GetCustomerByUsername(string username)
{
ICustomer customer = null;
try
{
using(SqlConnection _con = new SqlConnection(connectionString))
using(SqlCommand _cmd = new SqlCommand("GetUserByUsername", _con))
{
_cmd.CommandType = CommandType.StoredProcedure;
_cmd.Parameters.Add("Username", username);
_con.Open();
using(SqlDataReader dr = cmd.ExecuteReader())
{
customer = ExtractCustomerFromDataReader(dr)[0];
dr.Close();
}
_con.Close();
}
return customer;
}
catch (Exception e)
{
throw new Exception(e.Message + Environment.NewLine + e.StackTrace);
}
}
Используя блоки using()
, вы гарантируете, что рассматриваемый экземпляр класса будет освобожден в конце блока { ... }
- больше не нужно отслеживать состояние и больше не нужно предложение finally
.
Также: встроенная система безопасности отлично работает на вашем рабочем столе - но она не будет хорошо работать в размещенной среде.В конце концов: это процесс IIS, который теперь подключается к вашей базе данных - я бы предпочел использовать здесь конкретного пользователя с паролем.
Обновление: вы можете назвать своего пользователя как угодно -например, используйте имя приложения в качестве имени пользователя или что-то еще, что имеет для вас смысл.Вам необходимо создать это, например, с помощью SQL Server Express Management Studio, и сначала необходимо создать имя входа, используя CREATE LOGIN
или эквивалент GUI (в разделе «Безопасность» - «Вход в систему» - щелкните правой кнопкой мыши и выберите «Новый вход в систему») -этот шаг дает этому «имени» право в первую очередь входить в SQL Server.Это точка, где вы тоже выбираете пароль.
После того, как вы создали этот логин, вам нужно создать пользователя на основе этого логина в вашей базе данных (USE <database name> GO - CREATE USER ......
- или использовать графический интерфейс - Ваша база данных -> Безопасность -> Пользователи -> щелкните правой кнопкой мышии выберите «Новый пользователь»).
После того как все это будет у вас, строка подключения будет выглядеть примерно так:
Server=MyPC\SQLEXPRESS;Database=MySampleDb;User Id=(your user name);Pwd=(your password)