-1

何が問題なのか分からない簡単なコードを書きました。

コードは次のとおりです。

           var sortSecurities="SELECT * FROM securities";
           int total=0;
           var value="";
           foreach(var row in db.Query(sortSecurities))
           {
               value=row.lastGate;
               total=Convert.ToInt32(value)*100;// here the problem with compilation.. 
               db.Execute("INSERT INTO holding(IDgrossPortfolio,IDSecurity,totalHolding,units,buyGate) "+"VALUES (@0,@1,@2,@3,@4)",row.category,row.number,total,"100",row.lastGate);
           }

変換の問題は何ですか?

エラーは次のとおりです。

例外の詳細: System.FormatException: 入力文字列が正しい形式ではありませんでした。

4

4 に答える 4

2

valueInt32 に変換できる値を保持しません。デバッグを行って からの値を確認できればrow.lastGate、問題が何であるかがわかります。

また、何が返されるかdb.Query(sortSecurities)(または実際にどのようなオブジェクトであるか)もわかりませんが、に変更するrow.lastGateこともできますvalue=row.lastGate;value=row.lastGate.ToString();

于 2012-12-06T16:50:36.790 に答える
1

try parseを使用して、値に実際に数値が含まれているかどうかを確認できます

  int total;
  bool result = Int32.TryParse(value, out total);
  if (result)
  {
      db.Execute("INSERT INTO holding(IDgrossPortfolio,IDSecurity,totalHolding,units,buyGate) "+"VALUES (@0,@1,@2,@3,@4)",row.category,row.number,total,"100",row.lastGate);

  }
于 2012-12-06T16:55:08.723 に答える
0

どうもありがとうございました...私は今試してみて、エレガントな答えを見つけました。

コメントに書いたように、row.lastGateの値は、チェックする必要のない数値を表していることがわかっているためです。 だから私はこれを試してみて、それはうまくいきます:

var sortSecurities="SELECT * FROM securities";
           int total=0;
           double value=0;
           foreach(var row in db.Query(sortSecurities))
           {
               value=Convert.ToDouble(row.lastGate);
               total=Convert.ToInt32(value)*100;//100 is default
               db.Execute("INSERT INTO holding(IDgrossPortfolio,IDSecurity,totalHolding,units,buyGate) "+"VALUES (@0,@1,@2,@3,@4)",row.category,row.number,total,"100",row.lastGate);
           }

おそらく、最初に値をdoubleに変更してから、intに変更する必要がありました。直接intに変更しようとすると、数値にドットが含まれているため、コンパイラが文字列を正しく解釈しませんでした(doubleと入力)。

意図について感謝します。

于 2012-12-06T17:22:24.363 に答える
0

あなたvalueは正常に解析されていませんConvert.ToInt32()

Int32.TryParse()または、データが実際に期待しているタイプのデータであるかどうかを使用して検証することを検討してください。

int result;
if(Int32.TryParse(row.lastGate, out result))
{
    //row.lastGate was a valid int
    total = result * 100;
}
else
{
    //row.lastGate wasn't a valid int
}
于 2012-12-06T16:54:45.403 に答える