Присоединение базы данных в Sqlite с использованием .NET не работает

Я создал вспомогательный класс для Sqlite на С# (используя Data.SQLite), где я помещаю такие методы, как GetTables, GetColumnNames,...

Теперь я добавил метод AttachDatabase для подключения базы данных, но, похоже, он не работает.

Код для этого метода выглядит следующим образом

    public void AttachDatabase(string path)
    {
        string db_name = "attdb";
        sqlConnection.Open();

        SQLiteCommand scom = new SQLiteCommand(sqlConnection);
        scom.CommandText = "ATTACH '"+path+"' AS " + db_name;

        scom.ExecuteNonQuery();

        sqlConnection.Close();
    }

Метод не генерирует никаких исключений, когда я указываю путь к файлу базы данных.


И чтобы проверить это, я добавил еще один метод во вспомогательный класс, подобный этому

    public List<string> GetAllDatabases()
    {
        List<string> mylist = new List<string>();

        sqlConnection.Open();
        SQLiteCommand scom = new SQLiteCommand("PRAGMA database_list", sqlConnection);
        SQLiteDataReader sreader = scom.ExecuteReader();

        while (sreader.Read())
        {
            string name = (sreader.GetValue(1)).ToString();
            mylist.Add(name);
        }
        sqlConnection.Close();

        return mylist;
    }

После присоединения базы данных этот метод возвращает список, содержащий только основную таблицу.

Что я делаю неправильно?


person user850010    schedule 18.04.2012    source источник
comment
Чего вы пытаетесь достичь?   -  person My Other Me    schedule 18.04.2012


Ответы (1)


Sqlite не сохраняет подключенные базы данных. Каждый раз, когда вы открываете и закрываете соединение, подключенные базы данных забываются.

person My Other Me    schedule 18.04.2012
comment
Должен ли я просто держать соединение открытым во вспомогательном классе вместо того, чтобы открывать/закрывать соединение в каждом методе, как сейчас? Я намерен использовать sqlite только для настольных приложений. - person user850010; 18.04.2012
comment
На этот вопрос нет универсального ответа. Если у вас есть только одно приложение, обращающееся к БД за раз, я думаю, что можно использовать одно и то же соединение (хотя есть некоторые ошибки, связанные с несколькими потоками). Если вы хотите просто получить информацию о файле базы данных, вы можете открыть одно соединение с этим файлом и запросить этот файл без необходимости прикреплять файл. все зависит от ваших обстоятельств. - person My Other Me; 18.04.2012