为派生的IDbCommand类创建转换

时间:2017-02-05 10:52:16

标签: c# c#-4.0 sqlclient

我已经创建了一个派生的IDbCommand classe,我想用它来更轻松地进行Sql-DB访问。

all <- read.csv("XXX.csv")
splitted <- split(all, all$case_con)

dim(splitted[[1]]) #--> gives me 185
dim(splitted[[2]]) #--> gives me 180

现在我想扩展这个类来处理从sql-procedure的输出参数到本地类的属性的值赋值,如下所示:

internal class Prozedur : IDbCommand
{
    private SqlCommand command = new SqlCommand();
    private SqlConnection connection;
    string commandtext;
    CommandType commandType;
    ...

这显然不会起作用,因为没有转换。我知道使用

Prozedur p = new Prozedur();
object.Name = p.Parameters["@Name"].Value;

会奏效。我如何扩展Prozedur类,所以我将能够使用

object.Name = (string)p.Parameters["@Name"].Value;

并执行其他操作,例如检查参数值或检查空值?

1 个答案:

答案 0 :(得分:2)

实现一种方法来访问这些值并返回它们已经输入的内容:

public TValue GetValue<TValue>(string parameterName)
{
    // Do stuff here before returning the parameter value...
    return (TValue)Parameters[$"@{parameterName}"]?.Value;
}

稍后,您将访问您的参数&#39;值如下:

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);
}