1

问题:我无法确定用于将 WPF 桌面应用程序连接到 Azure 文件存储上的 SQLite 数据库的连接字符串。感谢MSDN 文档,我能够从应用程序访问 CloudFile(因此我可以访问 URI),但是当我将 URI 传递给连接字符串以创建连接然后尝试打开连接时,我得到一个我的 URI 无效的错误消息。当我尝试连接到硬盘驱动器上的 SQLite 数据库时,连接工作正常。我是否需要将密钥或其他内容传递给 SQLite 连接字符串才能连接到 Azure 文件存储上的数据库?甚至可能吗?

    /// <summary>
    ///  Add all online (Azure file storage) data sources
    /// </summary>
    private void FindOnlineDataSources()
    {
        var accountName = "myAccountName";
        var keyValue = "myKeyValue";
        var useHttps = true;
        var exportSecrets = true;

        var storageCredentials = new StorageCredentials(accountName, keyValue);
        var storageAccount = new CloudStorageAccount(storageCredentials, useHttps);
        var connString = storageAccount.ToString(exportSecrets);

        // Create a CloudFileClient object for credentialed access to Azure Files.
        CloudFileClient fileClient = storageAccount.CreateCloudFileClient();

        // Get a reference to the file share we created previously.
        CloudFileShare share = fileClient.GetShareReference("myShare");

        // Ensure that the share exists.
        if (share.Exists())
        {
            // Get a reference to the root directory for the share.
            CloudFileDirectory rootDir = share.GetRootDirectoryReference();

            // Get a reference to the directory we created previously.
            CloudFileDirectory sampleDir = rootDir.GetDirectoryReference("myDirectory");

            // Ensure that the directory exists.
            if (sampleDir.Exists())
            {
                // Get a reference to the file we created previously.
                var fileList = sampleDir.ListFilesAndDirectories();
                foreach (var fileTemp in fileList)
                {
                    if (fileTemp is CloudFile && TestConnection(SQLiteOnlineConnectionBuilder(fileTemp.StorageUri.PrimaryUri.AbsoluteUri)))
                    {
                        // Store reference to data source
                    }
                }
            }
        }
    }

    /// <summary>
    ///  Test data source connection to determine if it is accessible
    /// </summary>
    private bool TestConnection(DbConnection connection)
    {
        bool retval = false;
        try
        {
            connection.Open();
            connection.Close();
            retval = true;
        }
        catch { }

        return retval;
    }

    /// <summary>
    ///  Create SQLite connection from URI string
    /// </summary>
    private DbConnection SQLiteOnlineConnectionBuilder(string uri)
    {
        return new SQLiteConnection
        {
            ConnectionString = new SQLiteConnectionStringBuilder
            {
                Uri = uri,
                ForeignKeys = true,
                BinaryGUID = false,

            }.ConnectionString
        };
    }

背景:我正在构建一个桌面应用程序供我公司使用。应用程序的数据保存在 SQLite 数据库中。我们一次最多只能有 5 个用户访问数据,所以我认为没有必要尝试设置完整的服务器 - SQLite 似乎是一个不错的选择。

但是,我正在尝试将 SQLite 数据库放入我们的 Azure 文件存储帐户,以便多个用户可以通过桌面应用程序访问它,只要他们可以访问互联网。我们没有中央公司网络,所以我认为 Azure 文件存储将是可行的方法。

4

1 回答 1

0

嘿,Azure 文件共享的一个选项不是很安全,但可能适合您的需要,就是将 azure 文件共享映射到桌面应用程序所在的位置。然后你可以只指向映射驱动器内的 sqlite *db 文件。

https://docs.microsoft.com/en-us/azure/storage/files/storage-how-to-use-files-windows - 如何进行映射。

于 2020-10-12T12:56:21.590 回答