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