9

今天是个好日子,

截至目前我坚持这个错误

Error Converting data type 'Numeric' to Decimal

这是我的代码

AddManualItems AddReconItem = new AddManualItems();
        UserAccess user = new UserAccess();
        AddReconItem.BranchCode = BranchCodeTextBox.Text;
        AddReconItem.ForLoanMonth = YearDropDownList.SelectedValue + "/" + MonthDropDownList.SelectedValue;
        AddReconItem.ItemWeight = Convert.ToDecimal(WeightTextBox.Text);     
        AddReconItem.PrincipalAmount = Convert.ToDecimal(PrincipalTexAmTextBox.Text);
        AddReconItem.PawnTicket = PwnTicketTextBox.Text;
        AddReconItem.ItemStorageGroup = Convert.ToInt16(StorageNameDropDownList.SelectedValue);
        AddReconItem.ReconID = Convert.ToInt16(ReconTypeDropDownList.SelectedValue);
        user.UserID = Session["UserID"].ToString();

        string a = servs.AddItemRecon(user, AddReconItem); // this is where the error appears in debug mode

ADDitemRecon(User,AddReconItem) 里面的代码是这样的

 using (SqlConnection reportsConn = new SqlConnection(sqlConnWriter))
            {
                reportsConn.Open();
                SqlCommand AddReconItem = new SqlCommand();
                AddReconItem.Connection = reportsConn;
                AddReconItem.CommandType = CommandType.StoredProcedure;
                AddReconItem.CommandText = "Updater.usp_AddReconcileItems";
                AddReconItem.Parameters.AddWithValue("@ITEMWEIGHT", Convert.ToDecimal( items.ItemWeight));
                AddReconItem.Parameters.AddWithValue("@ITEMPRINCIPALAMT", Convert.ToDecimal(items.PrincipalAmount));
                AddReconItem.Parameters.AddWithValue("@FORLOANMONTH", Convert.ToDateTime(items.ForLoanMonth));
                AddReconItem.Parameters.AddWithValue("@STORAGEGROUPID", items.ItemStorageGroup);
                AddReconItem.Parameters.AddWithValue("@BRANCHCODE", items.BranchCode);
                AddReconItem.Parameters.AddWithValue("RECONID", items.ReconID);
                AddReconItem.Parameters.AddWithValue("@PAWNTIX",items.PawnTicket);
                AddReconItem.Parameters.AddWithValue("@CREATEDBY", user.UserID.ToString());
                AddReconItem.ExecuteNonQuery();
            }

我的 ItemWeight 属性是

 private decimal itemWeight;

    public decimal ItemWeight
    {
        get { return itemWeight; }
        set { itemWeight = value; }
    }

我敢打赌,错误出在项目重量中,因为当我输入项目重量 12345.12 时它可以正常工作,但是当我输入 1234 而不是将其视为 1234.00 时,它会将其视为 1234 仅使其成为数字..

有什么帮助吗?我不知道我的转换是否错误

顺便说一句,我在数据库中的字段是

fld_ItemWeight (decimal (38,6), not null

编辑** Decimal 中是否有任何已知错误?我现在使用 VS 2005。

4

7 回答 7

14

找到答案!我的存储过程错误我的存储过程中有小数(9,6),使其接受 3 位或更少!将其更改为(18,2)\

于 2013-09-24T03:12:05.713 回答
6

尽管原始发布者已经找到了解决方案,但为了其他人的利益,我想我会发布为我造成它的原因。

System.Data.SqlClient.SqlException:将数据类型数字转换为十进制时出错。

遗憾的是,该消息没有说明哪个参数有问题。因此,我将传递的所有参数都更改为 0(对于大多数 SQL 类型来说这是一个合适的值,您可能需要使用其他值),这使得错误消失了。然后我可以将它们一个一个恢复正常,并且每次都重新测试。这就是我确定哪个参数有问题的方法。

事实证明,对于其中一个参数,我在代码中的(C# 十进制)太大而无法放入 decimal(7,2) 存储过程参数。

于 2016-09-16T11:56:35.840 回答
0

我不知道这个问题的正确解决方案是什么,但我有一个想法。喜欢

ItemWeight将您的属性DataType小数更改为字符串

  decimal xxxyyy = Convert.ToDecimal(WeightTextBox.Text); 

    if(!xxxyyy .ToString().Contains(".00))
    {
      AddReconItem.ItemWeight=xxxyyy.ToString() +".00";
    }
    else
    {
     AddReconItem.ItemWeight=xxxyyy.ToString() ;
    }

编辑 :

试试这个另一种使用方式math.Round()

AddReconItem.ItemWeight = Convert.ToDecimal(WeightTextBox.Text);    
AddReconItem.ItemWeight=Math.Round(AddReconItem.ItemWeight,2);
于 2013-09-23T10:40:39.893 回答
0

尝试将您的值四舍五入。

私人小数 itemWeight;

public decimal ItemWeight
{
    get { return itemWeight; }
    set { itemWeight = Math.Round(value,yourPrecisionHere); }
}
于 2016-11-24T04:30:42.980 回答
0

将 Sql 列更改为 Decimal(18,2),在存储过程中相同,并在 ado.net 结束时采用 SqlDbType.Decimal

于 2017-12-28T08:35:52.143 回答
0

我的问题是该列具有正确的精度和比例(16,2),但我在过程中用作参数的变量没有(14,2)。因此,当尝试使用该过程插入 99999999999999 之类的内容时,我收到错误Error convert data type numeric to numeric

于 2020-07-09T23:50:27.137 回答
-1

当你调用一个过程并且它有一个十进制数据类型的参数时,你只能传递分数。有关更多详细信息,请参阅将数据类型数字转换为十进制时出错

于 2013-09-23T09:46:28.047 回答