开发了一个C# form程序。在自己电脑上完全没错误,测试时,在有些电脑上没问题,在有些电脑上出现异常“输入字符串的格式不正确”向高手求解。

解决方案 »

  1.   

    我想到一个办法  把所有的float.parse 改成 convert.single   可是依旧没有效果  
      

  2.   

    看看出错的输入法是不是全角的状态下,数字建议用double类型
      

  3.   


    这个异常是我自己用   try{} catch(exception e){messagebox(e)} 结构,通过一个小对话框输出异常信息的。  出现异常的机器没有开发软件工具,不知道怎么去调试。  
      

  4.   

    private void MainForm_Load(object sender, EventArgs e)
            {
                int month = 0;
                float xiaoshou = 0;
                float tuikuan = 0;
                float huikuan = 0;
                float xiaoshouJe = 0;
                float tuikuanJe = 0;
                float huikuanJe = 0;
                float qichu = 0;
                float qimo = 0;
                float qichuJe = 0;
                float qimoJe = 0;
                string coName;
                string product;
                string hwgg;            try
                {
                    SqlConnection mainformConn = DataBaseConn();                //table1: 日期,往来单位,货物名称,数量,总金额,单价,货物规格 
                    SqlDataAdapter thisAdapter = new SqlDataAdapter(
                        "select rq, wldw, hwmc, sl, zke, dj, hwgg from x_fh, x_fhhw"
                         + " where x_fh.ID  = x_fhhw.fhid and x_fh.iszf = 0 and x_fh.iskp =1"
                         + " order by dj, hwmc, wldw, rq", mainformConn);
                    thisAdapter.Fill(thisDataSet, "table1");                //table2: 核销日期,核销数量,货物名称,单位名称,核销金额
                    thisAdapter = new SqlDataAdapter(
                        "select x_hx.hxrq,x_hx.hxsl,x_hx.hwmc,x_fp.dwmc,x_hx.hxje, x_hx.hwgg from x_hx,x_fp" 
                        + " where x_hx.fph = x_fp.fph" 
                        + " order by x_hx.hwmc, x_fp.dwmc, x_hx.hxrq", mainformConn);
                    thisAdapter.Fill(thisDataSet, "table2");                //table2: 添加一列,标识一行是否被使用过。列初始化为false,即没使用过。
                    DataColumn col = new DataColumn();
                    col.DataType = typeof(Boolean);
                    col.ColumnName = "isused";
                    col.DefaultValue = false;
                    thisDataSet.Tables["table2"].Columns.Add(col);                #region table1: 添加列,thsl.thje,xssl.xsje。初始化值为0
                    DataColumn th_sl = new DataColumn();
                    DataColumn th_je = new DataColumn();
                    DataColumn xs_sl = new DataColumn();
                    DataColumn xs_je = new DataColumn();
                    th_sl.DataType = typeof(float);
                    th_je.DataType = typeof(float);
                    xs_sl.DataType = typeof(float);
                    xs_je.DataType = typeof(float);
                    th_sl.ColumnName = "thsl";
                    th_je.ColumnName = "thje";
                    xs_sl.ColumnName = "xssl";
                    xs_je.ColumnName = "xsje";
                    th_sl.DefaultValue = 0;
                    th_je.DefaultValue = 0;
                    xs_sl.DefaultValue = 0;
                    xs_je.DefaultValue = 0;
                    thisDataSet.Tables["table1"].Columns.Add(th_sl);
                    thisDataSet.Tables["table1"].Columns.Add(th_je);
                    thisDataSet.Tables["table1"].Columns.Add(xs_sl);
                    thisDataSet.Tables["table1"].Columns.Add(xs_je);
                    #endregion table1: 添加列,thsl.thje,xssl.xsje。初始化值为0                # region 主循环为table1,主循环内部循环table2
                   
      

  5.   

     for (int i=0; i<thisDataSet.Tables["table1"].Rows.Count; i++)
                    {                    if (thisDataSet.Tables["table1"].Rows[i]["hwgg"].ToString() == "")
                        {
                            thisDataSet.Tables["table1"].Rows[i]["hwgg"] = "无";
                        }                    //从sl,zke中,根据正负号,分离成销售和退货
                        if (thisDataSet.Tables["table1"].Rows[i][3].ToString()[0] == '-')
                        {
                            thisDataSet.Tables["table1"].Rows[i]["thsl"] 
                                =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["thsl"].ToString())
                                +Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i][3].ToString());                        thisDataSet.Tables["table1"].Rows[i]["thje"] 
                                =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["thje"].ToString())
                                +Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["zke"].ToString());
                        }
                        else
                        {
                            thisDataSet.Tables["table1"].Rows[i]["xssl"] 
                                =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["xssl"].ToString()) 
                                +Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i][3].ToString());                        thisDataSet.Tables["table1"].Rows[i]["xsje"] 
                                =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["xsje"].ToString()) 
                                +Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["zke"].ToString());
                        }                    if ((i + 1) < thisDataSet.Tables["table1"].Rows.Count)
                        {
                            if ((thisDataSet.Tables["table1"].Rows[i][0].ToString().Substring(0, 7) 
                                == thisDataSet.Tables["table1"].Rows[i + 1][0].ToString().Substring(0, 7))// 比对月份
                                && (thisDataSet.Tables["table1"].Rows[i][1].ToString() 
                                == thisDataSet.Tables["table1"].Rows[i + 1][1].ToString())//比对单位名称
                                && (thisDataSet.Tables["table1"].Rows[i][2].ToString() 
                                == thisDataSet.Tables["table1"].Rows[i + 1][2].ToString())//比对货物名称
                                && (thisDataSet.Tables["table1"].Rows[i][5].ToString() 
                                == thisDataSet.Tables["table1"].Rows[i + 1][5].ToString()))//比对货物单价
                            {
                                thisDataSet.Tables["table1"].Rows[i + 1]["thsl"] 
                                    =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i + 1]["thsl"].ToString()) 
                                    +Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["thsl"].ToString());                            thisDataSet.Tables["table1"].Rows[i + 1]["thje"] 
                                    =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i + 1]["thje"].ToString()) 
                                    +Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["thje"].ToString());                            thisDataSet.Tables["table1"].Rows[i + 1]["xssl"] 
                                    =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i + 1]["xssl"].ToString()) 
                                    +Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["xssl"].ToString());                            thisDataSet.Tables["table1"].Rows[i + 1]["xsje"] 
                                    =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i + 1]["xsje"].ToString())
                                    + Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["xsje"].ToString());
                               
                                continue;
                            }
                        }                    /*从表table1中取出月份*/
                        string strMonth = thisDataSet.Tables["table1"].Rows[i][0].ToString();
                        if (strMonth.Substring(0,4) == year)
                        {
                            strMonth = strMonth.Substring(5, 2);
                            if (strMonth[1] == '/')
                            {
                                strMonth = strMonth.Substring(0, 1);
                            }
                        }
                        else
                        {
                            strMonth = "0";
                        }
                        month = Convert.ToInt32(strMonth);                    /*往来单位*/
                        coName = thisDataSet.Tables["table1"].Rows[i][1].ToString();
                        /*地区名称*/
                        hwgg = thisDataSet.Tables["table1"].Rows[i]["hwgg"].ToString();
                        /*产品名称*/
                        product = thisDataSet.Tables["table1"].Rows[i][2].ToString();                    /*本月销售赋值*/
                        xiaoshou =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["xssl"].ToString());
                        xiaoshouJe =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["xsje"].ToString());
                        /*本月退款赋值*/
                        tuikuan =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["thsl"].ToString()); 
                        tuikuanJe =Convert.ToSingle(thisDataSet.Tables["table1"].Rows[i]["thje"].ToString());
                        
                        //本月回款初始化为0
                        huikuan = 0;
                        huikuanJe = 0;                    #region for(int n=0; n<thisDataSet.Tables["table2"].Rows.Count; n++)
                        for (int n=0; n<thisDataSet.Tables["table2"].Rows.Count; n++)
                        {
                            bool monCompare;//判断回款对应的月份                        /*月份为1~9*/
                            if (thisDataSet.Tables["table2"].Rows[n][0].ToString().Substring(6, 1) == "/")
                            { 
                                monCompare = (month.ToString() 
                                    == thisDataSet.Tables["table2"].Rows[n][0].ToString().Substring(5,1));
                            }
                            /*月份为10~12*/
                            else
                            {
                                monCompare = (month.ToString() 
                                    == thisDataSet.Tables["table2"].Rows[n][0].ToString().Substring(5,2));
                            }                        /*月份、产品型号、公司名称都对应的回款及汇款金额*/
                            if ((monCompare)
                                && (product
                                == thisDataSet.Tables["table2"].Rows[n][2].ToString())
                                && (coName
                                == thisDataSet.Tables["table2"].Rows[n][3].ToString())
                                && (bool.Parse(thisDataSet.Tables["table2"].Rows[n]["isused"].ToString()) 
                                == false)) 
                            {
                                huikuan = huikuan 
                                    +Convert.ToSingle(thisDataSet.Tables["table2"].Rows[n][1].ToString());
                                huikuanJe = huikuanJe 
                                    +Convert.ToSingle(thisDataSet.Tables["table2"].Rows[n][4].ToString());                            thisDataSet.Tables["table2"].Rows[n]["isused"] = true;
                            }
                        }
                        #endregion for(int n=0; n<thisDataSet.Tables["table2"].Rows.Count; n++)                    fillTableCol(month.ToString(), product, xiaoshou, tuikuan, 
                            coName, huikuan, xiaoshouJe, tuikuanJe, huikuanJe, hwgg);
                    }
                    # endregion 主循环为table1,主循环内部循环table2                DataRow[] table2DataRows = null;
                    table2DataRows = thisDataSet.Tables["table2"].
                                   Select("isused = false");
                    foreach (DataRow drTable2 in table2DataRows)
                    {
                        if (drTable2[0].ToString().Substring(0,4) == year)
                        {
                            /*月份为1~9*/
                            if (drTable2[0].ToString().Substring(6, 1) == "/")
                            {  
                                month = Convert.ToInt32(drTable2[0].ToString().Substring(5,1));
                            }
                            /*月份为10~12*/
                            else
                            {
                                month = Convert.ToInt32(drTable2[0].ToString().Substring(5,2));
                             }
                            product= drTable2[2].ToString();
                            xiaoshou = 0;
                            tuikuan = 0;
                            coName = drTable2[3].ToString();
                            huikuan=Convert.ToSingle(drTable2[1].ToString());
                            xiaoshouJe = 0;
                            tuikuanJe = 0;
                            huikuanJe =Convert.ToSingle(drTable2[4].ToString());
                            hwgg = drTable2["hwgg"].ToString();
                            fillTableCol(month.ToString(), product, xiaoshou, tuikuan, 
                                coName, huikuan, xiaoshouJe, tuikuanJe, huikuanJe, hwgg);
                        }
                        else
                        {
                            month = 0;
                            product = drTable2[2].ToString();
                            xiaoshou = 0;
                            tuikuan = 0;
                            coName = drTable2[3].ToString();
                            huikuan =Convert.ToSingle(drTable2[1].ToString());
                            xiaoshouJe = 0;
                            tuikuanJe = 0;
                            huikuanJe =Convert.ToSingle(drTable2[4].ToString());
                            hwgg = drTable2["hwgg"].ToString();
                            fillTableCol(month.ToString(), product, xiaoshou, tuikuan,
                                coName, huikuan, xiaoshouJe, tuikuanJe, huikuanJe, hwgg);
                        }
                    }              
      

  6.   

    在catch的地方,把Exception的StackTrace一并弹出来,在出错的机器上运行一下,看具体是哪行出的问题,再详细找问题点
    try
    {
    ......
    }
    catch (System.Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
    }
      

  7.   

    不用Convert,用TryParse方法,应该可以避免报错