2011-10-26 3 views
1

私は次のコードを持っています。ブレークポイントを使用すると、["@myID"]という値が表示されます。値は2467などの実際の値です。ただし、tryParseの文字列としてキャストできません。私は以下のように "as string"を使用しようとしましたが、toString()も試みました。私のstringIDはnullのままなので、tryParseはmyIDの値をゼロのままにします。私はそれが普通の構文問題だと確信していますが、私は困惑しています。私は2467などの実際のIDを返す必要があります。このSQL出力パラメータがうまく動作しないのはなぜですか?

public static int myMethod(string name) 
{ 
    Database myDB = DatabaseFactory.CreateDatabase("myDatabase"); 
    DbCommand myCommand = myDB.GetStoredProcCommand("myStoredProc"); 

    myDB.AddInParameter(myCommand, "@Name", DbType.String, name); 
    myDB.AddOutParameter(myCommand, "@myID", DbType.Int32, 4); 

    int myID = 0; 

    int test = myDB.ExecuteNonQuery(myCommand); 
    string stringID = myCommand.Parameters["@myID"].Value as string; 
    bool canParse = int.TryParse(stringID, out myID); 
    return myID; 
} 
+0

「Convert.ToInt32」機能を使用することができます。 – Tariqulazam

答えて

3

私の推測では、キャストに失敗しています。

int stringID =(int) myCommand.Parameters["@myID"].Value ; 

そして、私はあなたが次の行に再びそれを解析しようとする必要はないと思う:あなたは、あなたにもintとしてそれをリードバックしようとしなければならない、INTとOUTのPARAMを宣言しています。 myCommand.Parameters["@myID"].Valueにはすでに値が含まれているはずです。

+0

そうです。主に私は明示的なキャストでintとしてキャストしなければならなかった。私はintとして使うことができませんでした。 – WEFX

+0

@WEFXは私の答えを修正しました。それはうまくいくはずです。) – Icarus

2

また、あなたがストアプロシージャ自体で出力パラメータの値を設定していることを確認し

int stringID = Convert.ToInt32(myCommand.Parameters["@myID"].Value) ; 
関連する問題