错误将数据类型“数字”转换为十进制(帮助!)

时间:2013-09-23 09:06:21

标签: c# asp.net tsql sql-server-2008-r2 database-connection

每个人的好日子,

截至目前我一直坚持这个错误

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。

7 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分: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);

答案 2 :(得分:0)

虽然原始海报找到了他的解决方案,为了其他人的利益,我想我会发布导致它的原因。

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

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

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

答案 3 :(得分:0)

尝试在集合中舍入您的值。

private decimal itemWeight;

public decimal ItemWeight
{
    get { return itemWeight; }
    set { itemWeight = Math.Round(value,yourPrecisionHere); }
}

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我的问题是该列具有正确的精度和小数位数(16,2),但是我在过程中用作参数的变量却没有(14,2)。 因此,当尝试使用该过程插入诸如99999999999999之类的内容时,出现错误将数据类型从数字转换为数字时出错。

答案 6 :(得分:-1)

当您调用过程并且它具有带十进制数据类型的参数时,您只能传递分数。有关详细信息,请参阅Error converting data type numeric to decimal