Я использую SQLiteConnection
и ObservableCollection
для поиска в базе данных, а затем возвращаю коллекцию в элементе управления ListView
. Я, кстати, новичок в wpf и c #, но учусь.
Этот код работает и делает именно то, что я хочу, но это не моя проблема. Я не уверен, что это правильный путь.
using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=" + dbPath))
{
connect.Open();
using (SQLiteCommand cmd = connect.CreateCommand())
{
cmd.CommandText = @"SELECT " + cols + " FROM Files" + query;
cmd.CommandType = CommandType.Text;
using (SQLiteDataAdapter ad = new SQLiteDataAdapter())
{
ad.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
ad.Fill(ds);
using (DataTable dtt = ds.Tables[0])
{
List<SearchResultItem> lst = dtt.DataTableToList<SearchResultItem>();
return lst;
}
}
}
}
}
Это код, который я использую для обновления элемента управления ListView
, и, возможно, проблему можно найти здесь:
try
{
List<SearchResultItem> files = SQLiteHelper.Search(search);
SearchResultList = new ObservableCollection<SearchResultItem>();
foreach (var file in files)
{
SearchResultList.Add(file);
}
this.DataContext = this;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
Моя проблема заключается в чтении консоли вывода во время выполнения. Там я получаю исключение, которое я не понимаю. Он повторяет количество X раз в зависимости от того, сколько строк возвращено.
Это отображается в выходных данных каждый раз, когда я использую приведенный выше код. Мое приложение работает так, как я хочу, я просто хочу понять, почему оно выдает мне это сообщение в консоли. Может ли кто-нибудь любезно объяснить это мне, чтобы я мог узнать, почему, и, возможно, есть лучший способ написать код? :)
Возникло исключение:
'System.OverflowException' в mscorlib.dll
Редактировать: мне удалось найти корень причины, по которой ясамостоятельно. В моем классе SearchResultItem
:
public int isize { get; set; }
Решение: Изменение типа на long
или double
, если я подозреваю, что значения слишком велики. Спасибо за информацию, Перкинс.
public long isize { get; set; }