使用带有oracle数据库连接字符串

时间:2016-03-02 23:57:14

标签: c# oracle oracle11g

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

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

2 个答案:

答案 0 :(得分:0)

通常,运行时参数存储在代码之外,在许多情况下,配置文件是最佳位置之一。您可以使用工厂方法来构建连接字符串,如CodeProject-Don't Hard Code Your Data Providers中所示,或者您可以使用.NET连接字符串构建器编写几行代码来设置值,如ConnectionStringBuilder Class中所示。

答案 1 :(得分:0)

例如,目前我有一个Web应用程序,2个Web表单需要2个不同的连接我将向您展示我如何为2个表单中的1个表单

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); }

}

方法实际存储过程调用方法内部将如下所示我在Stored Proc名称中传递基于上面声明的静态storedProcName ..

创建一个帮助程序类,你可以在你想要执行代码的类中调用以下内容

  

HelperClass.cs

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;
    }
}
  

例如,如果您有2个不同的数据库连接字符串,那么您的Web.Config将如下所示..您将创建与上面相同的方法,将其调用ExecuteDataSet1....并将DbConn2更改为{{1并且在Public字符串ConnString中将DbConn2更改为其他类中的DbConn或者有一个复选框,根据选择你可以存储botn ConnString得到后退..调用你的另一个ConnString2非常直接

DbConn

//密切注意NameOfOracleUser中的 <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> ,这取决于您的程序设置如何设置OracleDbUserName.StoredProcedure名称。.方法中的通知我是传递UserConnName和string.Concat将从中获取storedProcName Populate_DataGrin就像一个魅力,如果你有一个存储的proc名称的下拉列表运行...它将通过根据drowpdown选择文本分配名称来工作相同..

最后但并非最不重要的是调用ExecuteDataSet2的方法/事件看起来像这样

public static string storedProcName = "NameOfSomeStoredProc";