我的目标是,在将邮政编码或区号输入文本框中时,另一个文本框应显示该邮政编码/区号的城市和州。我确实有一种方法可以使用两个Dictionaries
,但它在开始时有大约 15 秒的借出时间,并导致大约 10 倍的 RAM 使用量。不是最好的解决方案。所以我尝试使用数据库文件,使用 SQLite。一切都在开发计算机上完美运行,但是在将其转移到其他机器时,我遇到了几个不同的错误。
第一个是“无法找到 sqlite3.dll”,我想我已经修复了,但直到今天开始工作才能确定。但我也在我孩子的电脑和妻子的笔记本电脑上试过,因为他们都没有安装 sqlite。
我收到的异常之一是它无法打开数据库。这是我妻子的笔记本电脑,她安装了我相信使用 sqlite 的 iTunes,所以她可能已经有 dll 文件。
另一个(在孩子的电脑上)说桌子ZipCodes
不存在。
我已经粘贴了下面的表初始化,大部分是在我添加 DataSet 时由 VS 自动生成的。至于文件,我在计算机之间传输的文件夹中包含的文件是Locations.db3
、System.Data.SQLite.dll
和System.Data.SQLite.Linq.dll
。我正在使用最新版本的 SQLite,它是为 .NET 4.0 和 x64 设计的包。
我已经到处寻找帮助,并且认真对待我愿意坚持更长的加载时间的地步。
public void InitializeDB()
{
try
{
locationsDataSet = ((LocationsDataSet)App.Current.MainWindow.FindResource("locationsDataSet"));
locationsDataSetZipCodesTableAdapter = new LocationsDataSetTableAdapters.ZipCodesTableAdapter();
locationsDataSetAreaCodesTableAdapter = new LocationsDataSetTableAdapters.AreaCodesTableAdapter();
locationsDataSetZipCodesTableAdapter.Fill(locationsDataSet.ZipCodes);
locationsDataSetAreaCodesTableAdapter.Fill(locationsDataSet.AreaCodes);
zipCodesViewSource = ((CollectionViewSource)(this.FindResource("zipCodesViewSource")));
areaCodesViewSource = ((CollectionViewSource)(this.FindResource("areaCodesViewSource")));
zipCodesViewSource.View.MoveCurrentToFirst();
areaCodesViewSource.View.MoveCurrentToFirst();
}
catch (Exception ex)
{
MessageBox.Show("Database failed to load with exception " + ex.ToString());
}
}
XAML
<Window.Resources>
<main:LocationsDataSet x:Key="locationsDataSet" />
<CollectionViewSource x:Key="areaCodesViewSource" Source="{Binding Path=AreaCodes, Source={StaticResource locationsDataSet}}" />
<CollectionViewSource x:Key="zipCodesViewSource" Source="{Binding Path=ZipCodes, Source={StaticResource locationsDataSet}}" />
</Window.Resources>