今天是个好日子,
截至目前我坚持这个错误
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。
找到了答案!我的存储过程是错误的我在我的存储过程中有十进制(9,6)使其接受3位数或更少!将其更改为(18,2)\
我不知道这个问题的正确解决方案,但我有一个想法。喜欢
将您的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);
虽然原始海报找到了他的解决方案,为了其他人的利益,我想我会发布导致它的原因。
System.Data.SqlClient.SqlException:将数据类型numeric转换为decimal时出错。
遗憾的是,该消息并没有说明它遇到问题的参数。所以我更改了所有传递的参数,使其值为0(对于大多数SQL类型来说,这是一个合适的值,您可能需要使用其他值),这使得错误消失了。然后我可以将它们一个接一个地恢复正常,每次都重新测试。这就是我找出哪个参数有问题的方法。
事实证明,对于其中一个参数,我在代码中的值(C#十进制)太大而无法进入十进制(7,2)存储过程参数。
尝试在集合中舍入您的值。
private decimalWeight;
public decimal ItemWeight
{
get { return itemWeight; }
set { itemWeight = Math.Round(value,yourPrecisionHere); }
}
将Sql列更改为Decimal(18,2),在存储过程中相同,并在ado.net结束时获取SqlDbType.Decimal
当您调用一个过程并且它有一个带十进制数据类型的参数时,您只能传递分数。有关详细信息,请参阅Error converting data type numeric to decimal