C# 将变量与oracle数据库连接字符串一起使用

C# 将变量与oracle数据库连接字符串一起使用,c#,oracle,oracle11g,C#,Oracle,Oracle11g,我有一个小型c#软件,可以在多台服务器上的多个数据库上工作,我需要在不同的模式之间切换,所以.. 根据当前服务器ip,我连接到指定服务器上的主表 并获取模式名称,然后通过这种方式将其作为变量添加到连接字符串中。。 使用这种方式使连接字符串灵活安全吗? 如果没有,你有什么建议 string oradb = "Data Source=source;User Id=" + DBSchema + ";Password=pwd;"; 一般来说,运行时参数将存储在代码之外,在许多情况下,配置文件是存储这些

我有一个小型c#软件,可以在多台服务器上的多个数据库上工作,我需要在不同的模式之间切换,所以..
根据当前服务器ip,我连接到指定服务器上的主表 并获取模式名称,然后通过这种方式将其作为变量添加到连接字符串中。。 使用这种方式使连接字符串灵活安全吗? 如果没有,你有什么建议

string oradb = "Data Source=source;User Id=" + DBSchema + ";Password=pwd;";

一般来说,运行时参数将存储在代码之外,在许多情况下,配置文件是存储这些参数的最佳位置之一。您可以使用factory方法构建连接字符串,如中所示,也可以编写几行代码,使用.NET连接字符串生成器设置值,如中所示。

例如,当前我有一个web应用程序,其中两个web表单需要两个不同的连接。我将向您展示如何为其中一个表单设置连接

public static string storedProcName = "NameOfSomeStoredProc";
public string ConnString
{
    get { return ConfigurationManager.ConnectionStrings["DbConn2"].ConnectionString; }
}

public string UserConnName
{
    get { return string.Concat(ConfigurationManager.AppSettings["userConnName"], storedProcName); }

}
方法内部的方法实际存储过程调用将如下所示,我将根据上面声明的静态storedProcName传入存储过程名称

自己创建一个Helper类,您可以在希望执行代码的类中调用如下内容

HelperClass.cs

例如,如果您有两个不同的DB连接字符串,您的Web.Config将如下所示。。您可以创建与上面相同的方法,调用它
ExecuteDataSet1..
,并将
DbConn2
更改为
DbConn
,在公共字符串ConnString中,将DbConn2更改为其他类中的DbConn,或者创建一个复选框,并根据所选内容,可以存储botn ConnString get retrun。。直截了当地把你的另一个叫做ConnString2


这是完全可行的,我现在在两个不同的Oracle数据库之间切换时就这么做了。。在.Config文件中需要2个连接字符串,在连接字符串中需要执行以下操作
string.Format(“数据源={0};用户ID={1};密码={2}”
等等……我已经一步一步地介绍了如何做到这一点,这就像一个符咒,如果您了解我在代码的
公共字符串UserConnName{
部分中所做的工作,您可以看到如何动态调用存储过程,这是一个帮助您入门的示例。。
public static DataSet ExecuteDataSet2(string sql, CommandType cmdType, params OracleParameter[] parameters)
{
    using (DataSet ds = new DataSet())
    using (OracleConnection connStr = new OracleConnection(ConfigurationManager.ConnectionStrings["DbConn2"].ConnectionString))
    using (OracleCommand cmd = new OracleCommand(sql, connStr))
    {
        cmd.CommandType = cmdType;
        cmd.CommandTimeout = 60 * 22;
        foreach (var item in parameters)
        {
            cmd.Parameters.Add(item);
        }

        try
        {
            cmd.Connection.Open();
            new OracleDataAdapter(cmd).Fill(ds);
        }
        catch (Exception ex)
        {
            utilities.SendErrorEmails(ex);
            throw ex;
        }
        return ds;
    }
}
 <connectionStrings>
    <add name="DbConn" connectionString="Data Source={0};User Id={1};Password={2};" />
    <add name="DbConn2" connectionString="Data Source={0};User Id={1};Password={2};" />
 </connectionStrings>

<appSettings>
    <add key="userConnName" value="NameOfOracleUser." />
</appSettings>  
private void Populate_DataGrin(int intMonth, string strLocation)
{
    dtSomeDataTable = OracleDBHelper.ExecuteDataSet2(UserConnName, CommandType.StoredProcedure
               , new OracleParameter("var_IntMonth", intMonth)
               , new OracleParameter("var_StrLocation", strLocation)
               , new OracleParameter
               {
                   ParameterName = "p_cursor"
                 ,
                   OracleDbType = OracleDbType.RefCursor
                 ,
                   Direction = ParameterDirection.Output
               }
             ).Tables[0];

    YourDataGrid.DataSource = null;
    YourDataGrid.DataSource = dtSomeDataTable;
    YourDataGrid.DataBind();
}