连接到Azure文件存储上的SQLite数据库

时间:2018-06-05 15:06:20

标签: c# sqlite azure azure-files

问题: 我无法弄清楚用于将WPF桌面应用程序连接到Azure文件存储上的SQLite数据库的连接字符串。感谢MSDN Documentation我能够从应用程序访问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文件存储帐户,以便多个用户可以通过桌面应用程序访问它,只要他们可以访问Internet。我们没有中央公司网络,因此我认为Azure文件存储将是最佳选择。

1 个答案:

答案 0 :(得分:0)

嘿,Azure文件共享的一种不太安全但可能满足您需求的选项是将azure文件共享映射到桌面应用程序所在的位置。然后,您只需指向映射驱动器内的sqlite * db文件即可。

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