gpt4 book ai didi

c# - 将连接设置文件传递给 DatabaseProviderFactory、Ent 库

转载 作者:行者123 更新时间:2023-11-30 22:47:53 24 4
gpt4 key购买 nike

我正在使用 .NET 3.5/C#,我面临的问题是我需要能够加密和解密一个 .config 文件,该文件包含我所有要与 EnterpriseLibrary.Data.DatabaseProviderFactory 一起使用的数据库连接,如图所示在问题的最后。这种加密和解密是自定义的,使用已知 key 完成,并且每台机器都必须相同,这就是我不使用 ProtectSection 的原因。

我正在尝试读取一个加密的 configurationSetings.config 文件,解密内存中的文件并传递解密的将该文件的内容发送到 DatabaseProviderFactory,以便它能够访问数据库连接设置。

我目前(非加密配置文件)使用 MS Enterprise Libraries (v2) DatabaseProviderFactory 与 FileConfigurationSource 类一起查看 App.config 文件以获取 ConnectionSettings.config 文件的名称,我在其中存储数据库连接设置。

然后我将 ConnectionSettings 文件的路径传递给 FileConfigurationSource,然后将结果传递给 DatabaseProviderFactory这允许我创建一个数据库实例。

我不想将未加密的文件写入文件系统并读回。我一直在寻找为此使用独立存储的选项,但据我了解,您无法获得使用独立存储创建的文件的直接路径。

也许有一种方法可以创建自定义 ConfigurationSource 或其他允许我将解密的内容直接传递到 DatabaseProviderFactory 以创建数据库实例的方法。

所以本质上我需要读取一个加密的 configurationSetings.config 文件,在内存中解密该文件并将解密的该文件的内容到 DatabaseProviderFactory,以便它能够访问数据库连接设置,或类似的东西,以便我可以映射到 Microsoft.Practices.EnterpriseLibrary.Data.Database。

任何代码和/或建议将不胜感激。

提前致谢。

戴夫

APP.CONFIG

  <enterpriseLibrary.ConfigurationSource selectedSource="fileSource">
<sources>
<add
name="fileSource"
type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b2b86dc1561d89b"
filePath ="ConnectionSettings.config" />
<add
name="systemSource"
type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b8b89dc1061d43b" />
</sources>
</enterpriseLibrary.ConfigurationSource>

方法代码:

Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource fileConfig =
new Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource(connectionSettingsConfigFile);

Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory dbProvider =
new Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory(fileConfig);

if (string.IsNullOrEmpty(databaseConnectionName))
{
database = dbProvider.CreateDefault();
}
else
{
database = dbProvider.Create(databaseConnectionName);
}

CONNECTIONSETTINGS.CONFIG

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b2b86dc1561d89b" />
</configSections>

<dataConfiguration defaultDatabase="defaultConnection" />
<connectionStrings>
<add name="defaultConnection" connectionString="Data Source=192.11.111.11;Initial Catalog=TestDB;User Id:Test;Password:test"
providerName="System.Data.SqlClient" />

</connectionStrings>
</configuration>

似乎不使用 DatabaseProviderFactory,如果将其更改为使用特定的实现(例如 SqlDatabase),则它允许您将 connectionString 作为其构造函数的一部分传入,从而更加灵活。因此,由于我现在正在使用 SqlDatabase,我现在需要弄清楚的是如何将解密的配置文件的内容作为字符串传递到配置对象中。有什么想法吗?

最佳答案

我最终创建了一个自定义配置文件,该文件模仿使用 ConfigurationSettings 类的基来读取 .config 文件,因此实际上我一起删除了 Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings 配置部分,并且将其替换为自定义配置类。

希望这对某人有帮助。

关于c# - 将连接设置文件传递给 DatabaseProviderFactory、Ent 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2063417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com