0

我的目标是,在将邮政编码或区号输入文本框中时,另一个文本框应显示该邮政编码/区号的城市和州。我确实有一种方法可以使用两个Dictionaries,但它在开始时有大约 15 秒的借出时间,并导致大约 10 倍的 RAM 使用量。不是最好的解决方案。所以我尝试使用数据库文件,使用 SQLite。一切都在开发计算机上完美运行,但是在将其转移到其他机器时,我遇到了几个不同的错误。

第一个是“无法找到 sqlite3.dll”,我想我已经修复了,但直到今天开始工作才能确定。但我也在我孩子的电脑和妻子的笔记本电脑上试过,因为他们都没有安装 sqlite。

我收到的异常之一是它无法打开数据库。这是我妻子的笔记本电脑,她安装了我相信使用 sqlite 的 iTunes,所以她可能已经有 dll 文件。

另一个(在孩子的电脑上)说桌子ZipCodes不存在。

我已经粘贴了下面的表初始化,大部分是在我添加 DataSet 时由 VS 自动生成的。至于文件,我在计算机之间传输的文件夹中包含的文件是Locations.db3System.Data.SQLite.dllSystem.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>
4

0 回答 0