我的目标是,在输入邮政编码或区号到文本框中时,另一个文本框应该显示城市&该邮编/区号的状态。我确实有一个使用两个Dictionaries
工作的方法,但它在开始时有大约15秒的loand时间,并导致大约10倍的RAM使用率。不是最好的解决方案。所以我试图使用SQLite代替数据库文件。一切都在开发计算机上完美运行,但在将其转移到其他机器时,我会遇到几个不同的错误。
第一个是“无法找到sqlite3.dll”,我认为我已经修复但是在我今天上班之前无法确定。但是我已经在我孩子的电脑和妻子的笔记本电脑上试过了,因为他们都没有安装sqlite。
我收到的一个例外是它无法打开数据库。这是我妻子的笔记本电脑,她安装了iTunes,我相信使用sqlite,所以她可能已经有了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>