2017-02-05 10 views
2

簡単なSql-DBアクセスに使用する派生IDbCommandクラスを作成しました。派生IDbCommandクラスの変換を作成する

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

これは明らかにしません。今、私はこのようなローカルクラスのプロパティにSQLプロシージャーの出力パラメータから値の割り当てを処理するために、このクラスを拡張したい

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

このための変換がないので、動作します。私はそれを使用して知っている

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

が動作します。どのように私はProzedurクラスを拡張する必要がありますので、私は

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

を使用して、パラメータの値をチェックするように他のものを行うか、null値をチェックすることができるのだろうか?

答えて

2

それらの値にアクセスすると、すでに入力されたそれらを返すようにメソッドを実装します。次のように

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

もちろん、時にはyああ、ちょうど立ち往生し、完全に忘れて...;)ありがとう! –

+0

@ Mister832問題はありませんが、時には明白なことを聞​​く必要があります:D –