【问题标题】:Accessing a DB File on a computer from a HoloLens 2从 HoloLens 2 访问计算机上的数据库文件
【发布时间】:2020-12-03 09:50:11
【问题描述】:

HoloLens 文件访问

关键点:

  • 通过数据线插入计算机的 HoloLens 2 设备
  • 该计算机上位于 Environment.SpecialFolder.CommonApplicationData (C:/Program Files) 下的现有 SQLite DB
  • 很遗憾,由于其他要求,该文件必须保留在 C:/Program Files 中并且可供 HL2 访问。
  • HL2 应用使用 Unity 构建,但依赖于使用 EFCore 3.1.4 的私有 DLL。该DLL辅助DB操作,使用DbContext等。

目前,此 DLL 与其他实际应用程序一起运行 在客户端机器(计算机)上运行,所以他们没有问题 他们可以通过文件路径连接到数据库。

我所做的研究:

主要要求/问题:

**

如何使用现有的 DLL 实现(下面的示例代码), 实例化与驻留在计算机上的 DB 文件的连接 来自 HoloLens?该文件存放在 C:/Program Files/...

**

随附的现有代码示例

// <summary>
// Helper function to create a SQLite Database Connection
// </summary>
// <param name="dbPath">Path to the SQLite Database file</param>
// <param name="password">Password to Database</param>
public static SqliteConnection CreateDBConnection(string dbPath, string password)
{
    // Create path if it doesn't exist
    string path = Path.GetDirectoryName(dbPath);
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }

    // Check if db file exists
    if (!File.Exists(dbPath))
    {
        FileStream stream = File.Create(dbPath);
        stream.Close();
    }

    SqliteConnection connection = new SqliteConnection("DataSource=" + dbPath + CommonStrings.DB_Semicolon);
    connection.Open();
    using (SqliteCommand command = connection.CreateCommand())
    {
        command.CommandText = "SELECT quote($password);";
        command.Parameters.AddWithValue("$password", password);
        string escapedPassword = (string)command.ExecuteScalar(); // Protects against SQL injection

        command.Parameters.Clear();
        command.CommandText = "PRAGMA key = " + escapedPassword + CommonStrings.DB_Semicolon;
        command.ExecuteNonQuery();
    }

    return connection;
}

【问题讨论】:

  • 你为什么不创建一个在线服务器。有很多。这比你正在经历的麻烦要好。此外,HL2 中的 Windows 除了文件存储要求外还有其他限制。
  • @Saif 我理解你为什么会这样建议,我当然已经想到了。主要的复杂性是其他几个应用程序正在计算机上读取/写入此 SQLite DB,因此对服务器的检修并非微不足道,除非这实际上不可能实现,否则尚未获得批准。
  • 看来您是在要求我们为您编写访问 SQLite DB 的代码,这不是 Stack Overflow 存在的目的。如果这不是您要问的,请编辑您的问题,以更明确地说明您当前代码的实际问题。
  • @IanKemp 我想这在我身上,因为我没有明确说明一些事情。这里有更多的上下文,我希望能更好地解释我的问题。我是我公司用于这些其他项目的内部 DLL 的开发人员。我已经编写了这个用于生产的 DLL/PCL,它实现了 DbContext、UnitOfWork、存储库模式、EFCore,使用 SQLitePCLRaw.bundle_sqlcipher,等等。这仅起作用,因为在 SqliteConnection 的 DataSource=conStr 中,我可以传入数据库的实际文件路径,因为它位于同一台计算机上,我不能在 HL2 上执行此操作,因为它是外部的。
  • 这极大地改变了问题-我建议您对其进行编辑以包含您评论中的信息,因为 cmets 可以(理论上)随时被删除,并且这样会更加明显.至于答案,我的幼稚建议是将包含数据库的目录映射为网络驱动器,然后使用 UWP broadFileSystemAccess 权限访问它。

标签: c# sqlite unity3d entity-framework-core hololens


【解决方案1】:

我没有完全理解您的要求。据我了解,您想使用网络协议栈进行从 HL 到 PC 的 USB-over-IP 连接。现在还没有实现。

特别是,如果没有在 PC 上运行的服务器,您将无法从 Hololens 访问 PC。服务器应处理特定的 USB 端口命令以打开网络连接。在对方,HL应该有一个客户端通过USB对网络协议进行编码。

显然,这不是一个简单的方法。我建议打开从 HL 到 PC 的普通 TCP/IP 连接。

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多