2013-09-23 41 views
5

美好的一天每个人,错误转换数据类型 '数字' 为十进制(帮助!)

截至目前即时通讯坚持了这个错误

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 

编辑** 是否有小数已知的任何错误?即时通讯使用VS 2005截至目前。

回答

8

找到了答案试试这个法子!我的存储过程是错误的,我有十进制(9,6)我的存储procedured使其接受3位以内!把它改为(18,2)\

-1

,当你调用一个过程,它有一个小数数据类型的参数,那么您可以在分数只有通过。欲了解更多详情,请参阅Error converting data type numeric to decimal

+1

十进制(38,6)我有这个基础上,你articled已经给出了这个不应该产生任何错误,分数只适用于那些谁(2,2)相同的精度和相同的小数位数允许的声明。 – user2705620

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); 
+0

已经尝试过,但没有运气,当转换为十进制后任意00。被删除,我不知道为什么我只是看到它在调试模式 – user2705620

+0

a 112345.00转换后返回112345这是在数据库中传递的值,那些异常发生的可能 – user2705620

+0

@DanzaiVer更改您的数据库列DataType decimal为nvarchar和试试我的解决方案 –

0

虽然原来的海报已经找到了自己的解决方案,为益的其他人,我想我会张贴给我的东西。

System.Data.SqlClient.SqlException:错误转换数据类型数值为十进制。

可悲的是消息不说是有这个问题哪个参数。因此,我更改了所有通过的参数值为0(对于大多数SQL类型,这是一个合适的值,您可能需要使用其他值),这会导致错误消失。然后,我可以逐个将它们恢复正常,每次重新测试。这就是我计算出哪个参数有问题的原因。

事实证明,我的代码(C#十进制)中的参数的值中的一个参数太大而无法使用小数点(7,2)存储过程参数。

+0

只是一个提醒,(7,2)小数表示7是整个小数的长度,其中2个是小数,也就是说您的整个值只包含5个数字和2个小数位。 – user2705620

0

尝试四舍五入你的价值集。

private decimal itemWeight;

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

更改SQL列,以十进制(18,2),在存储过程相同,并采取SqlDbType.Decimal在ado.net结束

相关问题