我有一些小型的c#软件可以在多个服务器上的多个数据库上运行,我需要在不同的模式之间切换所以..
取决于当前服务器ip我连接到指定服务器上的主表
并获取模式名称,然后通过这种方式在连接字符串中添加为变量..
使用这种方式使连接字符串灵活是否安全?
如果没有那么你有什么建议
string oradb = "Data Source=source;User Id=" + DBSchema + ";Password=pwd;";
答案 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";