c# - 无法将参数值从 String 转换为 Double C#

标签 c# asp.net

我有一个由表填充的数据列表,当我尝试从数据列表更新表时,出现异常:“无法将参数值从字符串转换为 double 值”

这里是更新按钮的点击:

for (int x = 0; x < dlQtyBreak.Items.Count; x++)
{
    DataListItem item = dlQtyBreak.Items[x];

    string linenum = ((Label)item.FindControl("lblPBLinenum")).Text;
    string lowqty = ((TextBox)item.FindControl("txtPBLowQty")).Text;
    string highqty = ((TextBox)item.FindControl("txtPBHighQty")).Text;
    string price = ((TextBox)item.FindControl("txtPBPrice")).Text;
    string salesprice = ((TextBox)item.FindControl("txtPBSalesPrice")).Text;
    DAL.Util.updatePriceBreakRow(IQPDID(), lowqty, highqty, price, salesprice, linenum);

}

接下来的代码是 sql 和参数

public static void updatePriceBreakRow(string IQPDID, string low, string high, string price, string sPrice, string linenum)
{
    string sql = "UPDATE ItemQtyPriceDiscTable SET  LowQuantity=@LowQty, HighQuantity=@HighQty, Price=@Price WHERE linenum=@lineNum";

    AdoUtil.ACESSQLParameterCollection parameters = new AdoUtil.ACESSQLParameterCollection();
    AdoUtil.ACESSQLParameter param = new AdoUtil.ACESSQLParameter();

    param.ParamName = "@IQPDID";
    param.ParamValue = IQPDID;
    param.ParamDBType = SqlDbType.Int;
    parameters.Add(param);

    param.ParamName = "@LowQty";
    param.ParamValue = low;
    param.ParamDBType = SqlDbType.Float;
    parameters.Add(param);

    param.ParamName = "@HighQty";
    param.ParamValue = high;
    param.ParamDBType = SqlDbType.Float;
    parameters.Add(param);

    param.ParamName = "@Price";
    param.ParamValue = price;
    param.ParamDBType = SqlDbType.Float;
    parameters.Add(param);

    param.ParamName = "@SalePrice";
    param.ParamValue = sPrice;
    param.ParamDBType = SqlDbType.Float;
    parameters.Add(param);

    param.ParamName = "@linenum";
    param.ParamValue = linenum;
    param.ParamDBType = SqlDbType.Int;
    parameters.Add(param);

    param.ParamName = "@update";
    param.ParamValue = lastUpdate;
    param.ParamDBType = SqlDbType.VarChar;
    parameters.Add(param);

    AdoUtil.ExecuteNonQuery(sql, parameters);
}

什么可能导致此情况?当我在另一个数据列表上执行相同的过程时,它可以工作,唯一的区别是该表使用所有 Int 和 varchar 值,而该表使用 Float 和 varchar 值。如果有人有任何有用的见解来帮助解决这个问题,我们将不胜感激。如果有任何其他有用的代码,只需询问,我可以发布它。

谢谢。

最佳答案

既然您说所有测试都没有为“SalesPrice”填充值,请尝试删除或注释掉

param.ParamName = "@SalePrice";
param.ParamValue = sPrice;
param.ParamDBType = SqlDbType.Float;
parameters.Add(param);

然后像以前一样运行它,看看结果是否相同。它可能会保留那个空字符串。

如果确实是导致它的原因,只需在其中添加一个检查,然后排除该参数

关于c# - 无法将参数值从 String 转换为 Double C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12057741/

相关文章:

c# - 使用异步等待的并行多线程下载

c# - 逐级实现回退

c# - 将 int 转换为 BCD 字节数组

asp.net - 在 HttpModule 中重写 URL 时,如何让波浪号 (~) 运算符起作用?

javascript - jQuery 函数在进行 ajax 调用后不起作用

c# - 什么在 F# 中容易而在 C# 中难?

c# - 如何在Docker中运行32位.NET Core应用程序

c# - System.Net.Http.HttpClientExtensions 的使用不明确

c# - 跳过标准错误屏幕 Asp.Net

asp.net - 'System.Configuration.ConfigurationManager.AppSettings' 是一个 'property' 但像 'method' 一样使用