Состояние SqlConnection всегда закрывается при выполнении


Я пытаюсь сделать простое подключение к базе данных MS Access с помощью объектов SqlConnection и SqlCommand.

Как вы можете видеть, вот как я устанавливаю связь:

private SqlConnection GetConnection()
{
    String connStr = ConfigurationManager.ConnectionStrings[0].ConnectionString;
    SqlConnection conn = new SqlConnection(connStr);
    return conn;
}
И прежде чем вы спросите, да, я попытался переместить этот фрагмент кода в метод, который его вызывает. Ничего не изменилось. Он по-прежнему считывает строку подключения неправильно.

Строка подключения выглядит следующим образом и находится в файле App.config:

<add name="ConnString" connectionString="Server=*.*.*.*;Database=familie;User Id=mfs;Password=********;"/>

Но когда я получу это Ошибка:

Изображение Ошибки

И посмотрите на объект строки соединения в то время, строка выглядит следующим образом:

"data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
Я потратил около 2 часов, пытаясь сделать эту работу, заходя на множество различных сайтов, чтобы выяснить, что я сделал неправильно, но я либо получаю информацию, которая слишком стара, конфликтует или имеет дело с подключением к локальной базе данных, когда это на самом деле внешний доступ через прокси, который был предоставлен мне моим клиентом (TrustGate, если кто-то должен это сделать). спросите)

Метод, вызывающий GetConnection(), выглядит следующим образом:

public Dictionary<int,String> GetPostNrList()
{
    SqlConnection conn = GetConnection();
    SqlCommand cmd = new SqlCommand("Execute dbo.HENT_POST_NR_LISTE", conn);
    var reader = cmd.ExecuteReader();
    Dictionary<int, String> liste = new Dictionary<int, string>();
    while (reader.NextResult())
    {
        int post_nr = (int) reader.GetSqlInt32(0);
        String by = reader.GetString(1);
        liste.Add(post_nr, by);
    }
    CloseConnection(conn);
    return liste;
}

Что именно я делаю не так?

1 2

1 ответ:

Сообщение об исключении сообщает вам точно, в чем проблема - ваше соединение не открыто. Вам просто нужно открыть соединение перед выполнением команды:

conn.Open();

Кстати, хорошим примером является использование блока using при работе с SQL-соединениями, чтобы убедиться, что он правильно расположен:

using (var conn = GetConnection())
{
    using (var comm = xxxxxxx)
    {
        conn.Open();
        using (var rdr = comm.ExecuteReader())
        {
            // xxxxx
        }
    }
}

Вам не нужно ничего специально закрывать - шаблон using делает все это за вас.