【问题标题】:FormatException was unhandled by user code (string format is not in correct format)FormatException 未被用户代码处理(字符串格式不正确)
【发布时间】:2018-04-20 10:20:52
【问题描述】:

将 SQL 字段的值从数字类型转换为双精度。 输入字符串的格式不正确。 有人可以帮我解决这个问题吗?提前致谢!

新列表的声明:

public class OTTotal
{
public double OTPLAN;
public double OTACT;
}

然后我有这段代码将数据库字段的值传递给这些公共变量。

            mylist.Add(new OTTotal
            {

                OTAct = double.Parse(dr["OT"].ToString()) /*+ double.Parse(dr["SH"].ToString()) + double.Parse(dr["SHtwo"].ToString())*/,
                OTPlan = double.Parse(dr["POT"].ToString())


            });

当我运行程序并显示格式不正确时,此代码也被突出显示。

存储过程

CREATE PROCEDURE [dbo].[spTotalOverTime]
    @grpID as INT = 0,
    @date as DATE = '2018/3/1'
AS
BEGIN

    SELECT SUM(a.Overtime) as OT, SUM(a.PlanOt) as POT, SUM(a.SunHoliday) as SH, SUM(a.SunHoliday2) as SHtwo FROM tblTimesheet a JOIN userinfo b on a.empID = b.empID   JOIN tblGroup c on b.groupNo = c.groupID
            WHERE YEAR(a.tsDate) =  YEAR(@Date) AND MONTH(a.tsDate) = MONTH(@date) AND c.groupID = CAST(@grpID AS VARCHAR)

END

【问题讨论】:

  • 您确定dr["OT"]dr["POT"] 的双精度值正确吗?
  • 我确实在我的 sql 表中检查了它,所有值都是双精度的。
  • 检查不是表值,而是在代码中
  • 那是代码先生。如您所见,我尝试将其解析为双精度,并且将捕获数据库字段值的变量也是双精度。
  • 调试它然后让我们知道dr["OT"]dr["POT"]的值是什么。

标签: c# sql-server stored-procedures


【解决方案1】:

试试Convert.ToDouble(dr["OT"]);

【讨论】:

  • 这种情况下,应该显示dr["OT"]、ToString()和dr["POT"]的内容。 ToString() 之前将其传递给变量并确保它们包含正确的数字和格式。
  • 当我说格式时,我的意思是英里和小数的分隔符。示例:100.00 或 100,00 某些区域性引用(例如“fr-FR”)无法进行转换。对于这种情况,请使用: System.Globalization.CultureInfoculture = new System.Globalization.CultureInfo ("en-US");
【解决方案2】:

我已经解决了我的问题。我认为主要问题是我的列中有一个空值,这就是它不能转换为双精度的原因。 但是谢谢大家给我提示来解决它:)

所以这是解决我的问题的对策。

  mylist.Add(new OTTotal
                {

                    OTAct = (dr["OT"].ToString() == ""? 0.0 : double.Parse(dr["OT"].ToString())) + (dr["SH"].ToString() == "" ? 0.0 : double.Parse(dr["SH"].ToString())) + (dr["SHtwo"].ToString() == "" ? 0.0 : double.Parse(dr["SHtwo"].ToString())),
                    OTPlan = (dr["POT"].ToString() == "" ? 0.0 : double.Parse(dr["POT"].ToString()))

            });

谢谢大家:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多