Я борюсь. У меня есть запрос против моего дб, который возвращает отдельный столбец данных, и я должен установить его как Список. Вот то, с чем я работаю, и я заставляю ошибку о преобразовании пусто представлять в виде строки.
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)))
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
, созданного объектом соединения.
Ошибка связана с типом возврата вашего метода. Вы возвращаете void (public static
void
), но позже используете его так, как будто он возвращает List
.
Я думаю, что вы хотели использовать следующую сигнатуру метода:
public static List<string> GetImportedFileList()
Прежде всего, ваш возвращаемый тип недействителен. Вам нужно вернуть список. Другая проблема заключается в том, что вы инициализируете список внутри цикла, поэтому на каждом проходе цикла у вас появляется новый список, и, более того, вы не добавляете строку в список. Ваш код, вероятно, должен быть похож на:
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;
}
У вас уже есть способ получить отдельные результаты, поэтому мне кажется, что вам просто нужно:
Переместить List
вне цикла while
.
Вызов ImportedFiles.Add (FileNames);
внутри цикла (после присвоения этой строке).
возвращают ImportedFiles
в конце.
Измените тип возвращаемого значения на Список <строка>
.