为派生的 IDbCommand 创建转换 class
Create Conversion for derived IDbCommand class
我创建了一个派生的 IDbCommand classe,我想使用它来简化 Sql-DB 访问。
internal class Prozedur : IDbCommand
{
private SqlCommand command = new SqlCommand();
private SqlConnection connection;
string commandtext;
CommandType commandType;
...
现在我想扩展此 class 以处理从 sql 过程的输出参数到本地 class 属性的值分配,如下所示:
Prozedur p = new Prozedur();
object.Name = p.Parameters["@Name"].Value;
这显然行不通,因为没有为此进行转换。我知道使用
object.Name = (string)p.Parameters["@Name"].Value;
会起作用。我要如何扩展 Prozedur class,这样我才能使用
object.Name = p.Parameters["@Name"].Value;
并做其他事情,例如检查参数值或检查空值?
实现一种方法来访问这些值并且return它们已经输入:
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);
}
我创建了一个派生的 IDbCommand classe,我想使用它来简化 Sql-DB 访问。
internal class Prozedur : IDbCommand
{
private SqlCommand command = new SqlCommand();
private SqlConnection connection;
string commandtext;
CommandType commandType;
...
现在我想扩展此 class 以处理从 sql 过程的输出参数到本地 class 属性的值分配,如下所示:
Prozedur p = new Prozedur();
object.Name = p.Parameters["@Name"].Value;
这显然行不通,因为没有为此进行转换。我知道使用
object.Name = (string)p.Parameters["@Name"].Value;
会起作用。我要如何扩展 Prozedur class,这样我才能使用
object.Name = p.Parameters["@Name"].Value;
并做其他事情,例如检查参数值或检查空值?
实现一种方法来访问这些值并且return它们已经输入:
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);
}