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

Alb*_*ure 8 c# t-sql asp.net database-connection sql-server-2008-r2

今天是个好日子,

截至目前我坚持这个错误

Error Converting data type 'Numeric' to Decimal
Run Code Online (Sandbox Code Playgroud)

这是我的代码

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
Run Code Online (Sandbox Code Playgroud)

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();
            }
Run Code Online (Sandbox Code Playgroud)

我对ItemWeight的属性是

 private decimal itemWeight;

    public decimal ItemWeight
    {
        get { return itemWeight; }
        set { itemWeight = value; }
    }
Run Code Online (Sandbox Code Playgroud)

我打赌错误是在项目权重,因为当我输入项目权重12345.12它工作正常,但当我输入1234而不是将其视为1234.00它将其视为1234只使其数字..

任何帮助?我不知道我的转换是否错误

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

fld_ItemWeight (decimal (38,6), not null
Run Code Online (Sandbox Code Playgroud)

编辑**是否有任何已知的错误?即时通讯使用VS 2005.

Alb*_*ure 10

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


Ric*_*imo 7

虽然原发帖人已经找到了他的解决方案,但为了其他人的利益,我想我会发布对我来说是什么原因。

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

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

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

  • 提醒一下,(7,2) 小数表示 7 是整个小数的长度,其中 2 是小数,意思是说您的整个值将只包含 5 个数字和 2 个小数位。 (2认同)