Результаты запроса C# sqlite для списка <представляют в виде строки>

Я борюсь. У меня есть запрос против моего дб, который возвращает отдельный столбец данных, и я должен установить его как Список. Вот то, с чем я работаю, и я заставляю ошибку о преобразовании пусто представлять в виде строки.

public static void GetImportedFileList()
    {
        using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=C:\Documents and Settings\js91162\Desktop\CMMData.db3"))
        {
            connect.Open();
            using (SQLiteCommand fmd = connect.CreateCommand())
            {
                SQLiteCommand sqlComm = new SQLiteCommand(@"SELECT DISTINCT FileName FROM Import");
                SQLiteDataReader r = sqlComm.ExecuteReader();
                while (r.Read()) 
                {
                    string FileNames = (string)r["FileName"];

                    List<string> ImportedFiles = new List<string>();                        
                }                    

                connect.Close();
        }
    }
}

Затем позже в приложении

List<string> ImportedFiles = GetImportedFileList() // Method that gets the list of files from the db 
foreach (string file in files.Where(fl => !ImportedFiles.Contains(fl))) 
12
задан alex 20 March 2018 в 11:07
поделиться

4 ответа

public static List<string> GetImportedFileList(){
    List<string> ImportedFiles = new List<string>();
    using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=C:\Documents and Settings\js91162\Desktop\CMMData.db3")){
        connect.Open();
        using (SQLiteCommand fmd = connect.CreateCommand()){
            fmd.CommandText = @"SELECT DISTINCT FileName FROM Import";
            fmd.CommandType = CommandType.Text;
            SQLiteDataReader r = fmd.ExecuteReader();
            while (r.Read()){
                ImportedFiles.Add(Convert.ToString(r["FileName"]));
            }
        }
    }
    return ImportedFiles;
}

Я исправил в вашем коде:

  • Поместите ImportedFiles в область действия всего метода.
  • Нет необходимости вызывать connect.Close (); , поскольку объект соединения заключен в блок using.
  • Используйте Convert.ToString вместо (String) , поскольку первый будет обрабатывать все преобразования типов данных в строку. Я наткнулся на это Здесь

Изменить:

Вы создавали новый объект команды sqlComm вместо использования fmd , созданного объектом соединения.

29
ответ дан 2 December 2019 в 04:42
поделиться

Ошибка связана с типом возврата вашего метода. Вы возвращаете void (public staticvoid), но позже используете его так, как будто он возвращает List.

Я думаю, что вы хотели использовать следующую сигнатуру метода:

public static List<string> GetImportedFileList()
0
ответ дан 2 December 2019 в 04:42
поделиться

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

public static List<string> GetImportedFileList()
    {
        List<string> ImportedFiles = new List<string>();                        
        using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=C:\Documents and Settings\js91162\Desktop\CMMData.db3"))
        {
            connect.Open();
            using (SQLiteCommand fmd = connect.CreateCommand())
            {
                fmd.CommandText = @"SELECT DISTINCT FileName FROM Import";
                SQLiteDataReader r = fmd.ExecuteReader();
                while (r.Read()) 
                {
                    string FileNames = (string)r["FileName"];

                    ImportedFiles.Add(FileNames);
                }                    

                connect.Close();
        }
    }
    return ImportedFiles;
}
3
ответ дан 2 December 2019 в 04:42
поделиться

У вас уже есть способ получить отдельные результаты, поэтому мне кажется, что вам просто нужно:

Переместить List ImportedFiles = new List (); вне цикла while .

Вызов ImportedFiles.Add (FileNames); внутри цикла (после присвоения этой строке).

возвращают ImportedFiles в конце.

Измените тип возвращаемого значения на Список <строка> .

0
ответ дан 2 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: