如何处理外部dll中的连接字符串?
Posted
技术标签:
【中文标题】如何处理外部dll中的连接字符串?【英文标题】:How to handle the connection string in an external dll? 【发布时间】:2012-08-08 09:02:43 【问题描述】:如果我有一个dll
,我在许多 Web 应用程序中使用它来在我的应用程序中使用这个 dll
中的方法。
处理连接字符串的最佳做法是什么?
dll
方法是静态方法..
这就是我的工作
private static String connectionString = "User Id=xxx;Password=xxx;Host=xxx;Server=xxx;Service=1525;Database=xxx; Client Locale=ar_ae.1256; Database Locale=ar_ae.8859-6; Protocol=olsoctcp;pooling=true;Min Pool Size=4;Max Pool Size=400;Connection Timeout=30";
public static int Is_Valid_User(string p_u, string p_p)
int ret = 0; // invalid user
using (IfxConnection conn = new IfxConnection(connectionString))
IfxCommand DBCmd = new IfxCommand();
String p = My_Decryption_2(p_p);
try
if (conn.State == ConnectionState.Closed)
conn.Open();
DBCmd = new IfxCommand();
DBCmd.Connection = conn;
DBCmd.CommandText = "SELECT nvl(emp_num,0) FROM emp_net WHERE username = ? AND DECRYPT_CHAR(password, 'xxxxxx') = ? ";
DBCmd.Parameters.Add("user_name", p_u);
DBCmd.Parameters.Add("password", p);
using (IfxDataReader dataReader = DBCmd.ExecuteReader())
if (dataReader.Read())
ret = (int)dataReader[0];
dataReader.Close();
catch (ApplicationException e)
conn.Close();
return ret;
这是在我的网络应用程序中使用dll
的好方法吗?还是有比这更好的方法?
【问题讨论】:
【参考方案1】:你用这些静态方法几乎是在踢自己的脚。 最佳实践可能是重构类以使用实例方法并通过构造函数或属性注入连接字符串。
无法重构静态方法以包含连接字符串?
public static int Is_Valid_User(string p_u, string p_p, string connectionString)
您也可以对 [web|app]config 连接字符串的引用进行硬编码,但这只是改变了问题(对固定字符串的依赖),并没有解决它。
【讨论】:
【参考方案2】:最好在web.config
之类的配置中使用连接字符串。
【讨论】:
你的意思是我需要在我的dll
中添加一个 web 来配置,以添加到我的 web 应用程序中的 web.config 吗?
不,你不需要在 dll 中添加单独的 web.config,dll 可以从 web 应用程序中包含的 web.config 中读取连接字符串。以上是关于如何处理外部dll中的连接字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 ProcessPool 中的 SQLAlchemy 连接?