当我经常从Oracle数据库调用不同的数据集时,我使用了以下类来最小化代码重复.主要是我需要帮助来删除重载的构造函数中的代码重复,但任何其他建议也将不胜感激.
public class UniformData
{
private string connection = "My Connection String";
private OracleConnection con;
private OracleCommand com;
private OracleDataReader reader;
public UniformData(string sql)
{
con = new OracleConnection(connection);
con.Open();
com = new OracleCommand(sql, con);
}
public UniformData(string sql, List<SqlParameters> myParams)
{
con = new OracleConnection(connection);
con.Open();
com = new OracleCommand(sql, con);
foreach (SqlParameters Param in myParams)
{
com.Parameters.Add(Param.ParamName, Param.ParamValue);
}
}
public OracleDataReader GetReader()
{
reader = com.ExecuteReader();
return reader;
}
~UniformData()
{
con.Close();
con.Dispose();
com.Dispose();
reader.Close();
reader.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
通常我会有一个"规范"构造函数,所有其他构造函数链接到.在您的情况下,将涉及创建一个空列表:
public UniformData(string sql) : this(sql, new List<SqlParameters>())
{
}
public UniformData(string sql, List<SqlParameters> parameters)
{
con = new OracleConnection(connection);
con.Open();
com = new OracleCommand(sql, con);
foreach (SqlParameters parameter in parameters)
{
com.Parameters.Add(parameter.ParamName, parameter.ParamValue);
}
}
Run Code Online (Sandbox Code Playgroud)
或者,将参数类型更改为IEnumerable<SqlParameters>您可以使用的点Enumerable.Empty:
public UniformData(string sql) : this(sql, Enumerable.Empty<SqlParameters>())
{
}
public UniformData(string sql, IEnumerable<SqlParameters> parameters)
{
// Body as before
}
Run Code Online (Sandbox Code Playgroud)
你可以像Mong Zhu的代码那样以另一种方式拆分工作 - 但我倾向于认为在可能的情况下将所有工作保存在一个地方更清晰.这样可以很容易地验证您在所有情况下都已正确初始化所有变量 - 您只需要检查所有构造函数是否链接到规范变量,并且规范化的变量初始化所有变量.
另外我会:
IDisposable您可以使用更复杂的构造函数调用更简单的构造函数 this(parameter)
public UniformData(string sql)
{
con = new OracleConnection(connection);
con.Open();
com = new OracleCommand(sql, con);
}
public UniformData(string sql, List<SqlParameters> myParams): this(sql)
{
foreach (SqlParameters Param in myParams)
{
com.Parameters.Add(Param.ParamName, Param.ParamValue);
}
}
Run Code Online (Sandbox Code Playgroud)
在原来的职位是7岁,可以研究当被你错过了.
在使用构造函数(C#编程指南)可能会产生进一步的有用信息,包括我的回答