我创建了一个派生的IDbCommand类,我想用它来更轻松地进行Sql-DB访问。
internal class Prozedur : IDbCommand
{
private SqlCommand command = new SqlCommand();
private SqlConnection connection;
string commandtext;
CommandType commandType;
...
现在我想扩展这个类来处理从 sql-procedure 的输出参数到本地类的属性的值赋值,如下所示:
Prozedur p = new Prozedur();
object.Name = p.Parameters["@Name"].Value;
这显然是行不通的,因为没有转换。我知道使用
object.Name = (string)p.Parameters["@Name"].Value;
会工作。我必须如何扩展Prozedur类,以便我能够使用
object.Name = p.Parameters["@Name"].Value;
并执行其他操作,例如检查参数值或检查空值?
实现一个方法来访问这些值并返回它们已键入:
public TValue GetValue<TValue>(string parameterName)
{
// Do stuff here before returning the parameter value...
return (TValue)Parameters[$"@{parameterName}"]?.Value;
}
稍后,您将按如下方式访问参数的值:
string name = proc.GetValue<string>("name");
除此之外...还有另一种方法,您可以在该方法上实现一种方法来获取特定类型的值:
public object GetValue(string parameterName)
{
// Do common stuff here to any parameter value type
return Parameters[$"@{parameterName}"]?.Value;
}
public string GetString(string parameterName)
{
// Do common stuff here to string parameters only
return (string)GetValue(parameterName);
}