-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

value不包含可以转换为 Int32 的值。如果您可以进行一些调试并查看它的值来自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

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 回答
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 时,编译器没有正确解释字符串,因为数字中的点(双精度类型)。

谢谢你的意图..

于 2012-12-06T17:22:24.363 回答