Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在代码中更改ELMAH数据库_.net_Asp.net Mvc_Connection String_Elmah - Fatal编程技术网

.net 在代码中更改ELMAH数据库

.net 在代码中更改ELMAH数据库,.net,asp.net-mvc,connection-string,elmah,.net,Asp.net Mvc,Connection String,Elmah,我有几个网站有独立的ELMAH数据库。我想有一个单独的网站来查看所有这些数据库 为此,我创建了一个新的ASP.NETMVC4网站。我已经添加了NuGet包“Elmah.MVC”,并在Web.config中添加了以下内容: <connectionStrings> <add name="Elmah.Sql" connectionString="..." /> </connectionStrings> <elmah> <errorL

我有几个网站有独立的ELMAH数据库。我想有一个单独的网站来查看所有这些数据库

为此,我创建了一个新的ASP.NETMVC4网站。我已经添加了NuGet包“Elmah.MVC”,并在Web.config中添加了以下内容:

<connectionStrings>
    <add name="Elmah.Sql" connectionString="..." />
</connectionStrings>
<elmah>
    <errorLog type="Elmah.SqlErrorLog" connectionStringName="Elmah.Sql" />
</elmah>


这在一个数据库中运行得很好。我还可以通过更改connectionstring来切换数据库,但现在我希望能够从代码切换数据库。有没有办法做到这一点?

如果您想从代码切换数据库,您将无法依赖
Web.config
。您需要将活动连接存储在如下类中:

public class DatabaseSession
{
    public string ConnectionString { get; set; }
}
然后,您需要在
会话中存储该实例:

Session["DatabaseSession"] = new DatabaseSession() { ConnectionString = "your connection string"; }
每次要更改数据库连接时,都需要运行该行。然后,当您想要连接到数据库时,需要将其从会话中拉出

但是,您可以将所有不同的连接字符串存储在
Web.config
中,让用户从该列表中进行选择-您无法利用它来确定连接字符串。


注意:您也可以将连接字符串存储在会话中
会话[“DatabaseConnection”]=“您的连接字符串”
ELMAH有一个用于自定义错误日志的类。您只需要像这样实现这个类

public class YourErrorLog : SqlErrorLog
{
    public override string ConnectionString
    {
        get
        {
            //return any connection string that you want
        }
    }
}
在此实现中,您可以读取所需的任何连接字符串。 最后你可以告诉ELMAH知道错误日志

<elmah>
    <errorLog type="YourAssembly.YourErrorLog, YourAssembly" connectionStringName="elmah-sqlserver" />
</elmah>

你可以看到细节

我还发现了你的一个例子


希望有帮助。

我正在运行时检索连接字符串,因此来自ThangChung的选项对我无效。但是我做了一些小的改变,使它工作了

SqlErrorLog,这两个构造函数都是必需的

 public class ElmahSqlErrorLog : SqlErrorLog
 {
    public override string ConnectionString
    {
        get { return SettingsXmlService.GetConnectionString(); }
    }

    public ElmahSqlErrorLog(IDictionary config) : base(config)
    {
    }

    public ElmahSqlErrorLog(string connectionString) : base(connectionString)
    {
    }
 }
web.config(在system.webServer之后添加)



connectionString的值并不重要,因为我们在运行时检索它,但它不能为空。

Man我多么喜欢这个网站!
 <elmah>
    <errorLog type="Business.Infrastructure.Elmah.ElmahSqlErrorLog, Business" connectionString="-" applicationName="Topsite" />
 </elmah>