【问题标题】:C# UWP Embedded SQLite DatabaseC# UWP 嵌入式 SQLite 数据库
【发布时间】:2016-09-30 05:35:47
【问题描述】:

我正在使用嵌入在应用程序文件中的数据库。 我把 Build Action: Content 放到数据库中,它的路由是“Database/Original.db”,但我无法连接。 错误在以下行:

SQLiteConnection dbConnection = new SQLiteConnection("Database/Original.db");

这是我的代码:

PageMetrados.xaml.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Storage;
using SQLitePCL;

namespace Presupuestos
{
           public sealed partial class PageMetrados : Page
    {
        public PageMetrados()
        {
            this.InitializeComponent();
        }

        private void buttonShowList_Click(object sender, RoutedEventArgs e)
        {
            SQLiteConnection dbConnection = new SQLiteConnection("Database/Original.db");
            var datos = new List<Metrados_Head>();
            string sSQL = @"SELECT
                            [A],
                            [B],
                            [C],
                            [D],
                            [E],
                            [F]
                            FROM Metrados_Head";

            ISQLiteStatement dbState = dbConnection.Prepare(sSQL);

            while (dbState.Step() == SQLiteResult.ROW)
            {
                string sA = dbState["A"] as string;
                string sB = dbState["B"] as string;
                string sC = dbState["C"] as string;
                string sD = dbState["D"] as string;
                string sE = dbState["E"] as string;
                string sF = dbState["F"] as string;

                Metrados_Head Datos_Metrados_Head = new Metrados_Head() { A = sA, B = sB, C = sC, D = sD, E = sE, F = sF };
                datos.Add(Datos_Metrados_Head);
            }
            ListMetrados_Head.ItemsSource = datos;        }
    }
}

Metrados_Head.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Presupuestos
{
    public class Metrados_Head
    {
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
        public string D { get; set; }
        public string E { get; set; }
        public string F { get; set; }
    }
}

它显示在列表视图中:

<ListView x:Name="ListMetrados_Head" HorizontalAlignment="Left" Height="600" Margin="10,109,0,0" VerticalAlignment="Top" Width="1260" BorderBrush="Black" BorderThickness="1" Background="White">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Width="{Binding ActualWidth, ElementName=ListMetrados_Head}" Padding="0" Margin="0" >
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="80" />
                        <ColumnDefinition Width="80" />
                        <ColumnDefinition Width="80" />
                        <ColumnDefinition Width="80" />
                        <ColumnDefinition Width="80" />
                        <ColumnDefinition Width="80" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="40"/>
                    </Grid.RowDefinitions>
                    <TextBlock x:Name="TextBlock_A" Grid.Column="0" Text="{Binding Path=A}" TextWrapping="Wrap" />
                    <TextBox x:Name="TextBox_B" Grid.Column="1" Text="{Binding Path=B}" TextWrapping="Wrap" />
                    <TextBox x:Name="TextBox_C" Grid.Column="2" Text="{Binding Path=C}" TextWrapping="Wrap" />
                    <TextBox x:Name="TextBox_D" Grid.Column="3" Text="{Binding Path=D}" TextWrapping="Wrap" />
                    <TextBox x:Name="TextBox_E" Grid.Column="4" Text="{Binding Path=E}" TextWrapping="Wrap" />
                    <TextBox x:Name="TextBox_F" Grid.Column="5" Text="{Binding Path=F}" TextWrapping="Wrap" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
        </ListView>

【问题讨论】:

  • 而错误是......?
  • 在一个地方你写了“Databases/Original.db”但在另一个“Database/Original.db”。
  • 那是一条有效的路径吗?
  • 谢谢 Alexej Sommer,这是我写问题时的错误,现在正在编辑。

标签: c# database sqlite uwp


【解决方案1】:

为了访问与您的应用一起打包的资源,您应该使用以下表单ms-appx:///Database/Original.db(如果数据库文件夹直接位于根文件夹下)

ms-appx:/// 方案可让您访问应用程序的安装文件夹。 请记住,安装文件夹中的文件是只读的,因此您无法对其进行更改。

另外,这也可能有效/Database/Original.db

您还应该检查您是否使用了有效的路径。例如,我在您的问题中看到路径是Databases/Original.db,而在您的代码中是Database/Original.db。确保您使用的是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2021-09-29
    • 2019-10-15
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多