У меня есть этот проект, который я написал в VS2010 как проект WinForms. Я не пишу это в VS2012 как проект WPF. У меня есть указанная DLL (DailyReport). Внутри DailyReport находится метод под названием GetUniqueDates(). Это выглядит так:

    public List<string> GetUniquesDates()
    {
        var dates = new List<string>();

        const string query = "SELECT date FROM hdd_local_data_v1_2";

        try
        {
            // Exception here  on the connection creation
            using (var connection = new SqlConnection(ConnectionStringFile)) 
            {
                using (var command = new SqlCommand(query, connection))
                {
                    connection.Open();

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            for (var i = 0; i < reader.FieldCount; i++)
                            {
                                dates.Add(reader.GetValue(i).ToString());
                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {         
            Logger.Error(ex.Message);
        }

        dates.Sort();

        return dates.Distinct().ToList();
    }

ConnectionStringFile устанавливается в конструкторе и выглядит так:

ConnectionStringFile = @"Data Source=C:\hdd_data\Rubicon.hdd;Version=3;New=False;Compress=True;";

Теперь, в моем проекте VS2010 WinForms, этот метод работал нормально. Однако в моем проекте VS2012 WPF я получаю исключение, о котором я упоминал выше. И исключение:

keyword not supported 'version'.

База данных - это база данных SQLite. Я попытался удалить ключевое слово version, но потом получил исключение:

keyword not supported 'new'.

Мой вопрос: почему соединение будет работать в моем проекте WinForms, а не в моем проекте WPF? Что-то изменилось при работе с соединениями с базой данных?

Также обратите внимание, что это не вопрос параметризованных запросов и т.п. Так что, если возможно, пожалуйста, эти комментарии про себя. Спасибо.

6
PiousVenom 22 Янв 2013 в 20:04
Взгляните на эту ссылку: connectionstrings.com/sqlite, особенно последний элемент.
 – 
Mark Kram
22 Янв 2013 в 20:23
@MarkKram: Как я уже говорил ранее парню, который отправил это в качестве ответа, а затем удалил свой вопрос, моя база данных находится по пути, указанному в моей строке подключения. По этой ссылке, в разделе «База данных в памяти», у меня правильная строка.
 – 
PiousVenom
22 Янв 2013 в 20:25
2
Разве вам не нужно использовать реальные классы SQLite для доступа к базе данных SQLite в памяти? Я почти уверен, что стандартный SqlConnection от Microsoft не знает, как подключиться к одному из них ... =)
 – 
J. Steen
22 Янв 2013 в 20:43
@ J.Steen: Вы, сэр, гений. Я знал, что делаю что-то совершенно глупое. Data Source может быть путем к файлу, и он работает, теперь, когда я изменил его с SqlConnection на SQLiteConnection. Спасибо.
 – 
PiousVenom
22 Янв 2013 в 20:53
Не стесняйтесь добавлять свое решение в качестве собственного ответа. Я ничего не знаю о SQLite и, на самом деле, просто делал обоснованное предположение. ;)
 – 
J. Steen
22 Янв 2013 в 21:11

1 ответ

Лучший ответ

Проблема, с которой я столкнулся, заключалась в том, что я пытался создать SqlConnection вместо SQLiteConnection. Это изменение решило мою проблему.

13
PiousVenom 23 Янв 2013 в 01:25