【发布时间】:2013-09-24 01:32:49
【问题描述】:
目前我遇到了这种错误
将数据类型浮点数转换为十进制时出错。
或
将数据类型数字转换为十进制时出错
这是我的代码
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.Add("@varible",SqlDbType.Decimal
AddReconItem.Parameters.AddWithValue("@ITEMWEIGHT", Math.Round(Convert.ToDouble(WeightTextBox.Text+".00"), 2));
AddReconItem.Parameters.AddWithValue("@ITEMPRINCIPALAMT", Math.Round(Convert.ToDouble(PrincipalTexAmTextBox.Text + ".00"), 2));
AddReconItem.Parameters.AddWithValue("@FORLOANMONTH", Convert.ToDateTime(YearDropDownList.SelectedValue + "/" + MonthDropDownList.SelectedValue));
AddReconItem.Parameters.AddWithValue("@STORAGEGROUPID", StorageNameDropDownList.SelectedValue);
AddReconItem.Parameters.AddWithValue("@BRANCHCODE",BranchCodeTextBox.Text);
AddReconItem.Parameters.AddWithValue("RECONID", ReconTypeDropDownList.SelectedValue);
AddReconItem.Parameters.AddWithValue("@PAWNTIX",PwnTicketTextBox.Text);
AddReconItem.Parameters.AddWithValue("@CREATEDBY", Session["UserID"].ToString());
AddReconItem.ExecuteNonQuery();
}
当我输入时,123 for principalamt 和 itemweight 它接受答案并将其视为小数,但是当我输入 1234 for itemweight 并且仍然 123 for Principalamt 它时显示该错误,如果我删除转换并将其更改为Convert.ToDecimal,它会显示Error converting data type Numeric to decimal,如果我将其用作文本,则会显示Error converting data type varchar to decimal
这是一个错误还是什么?我似乎无法找到一种方法,我尝试了很多选项,但它们都没有奏效
我的数据库列如下:
我真的希望你能帮助我理解这个现象
编辑
这是我第一次看到一个程序接受 123 作为有效输入而 1234 不是,我的数据库Decimal (38,6) 非常大,可以容纳这个输入,这就是为什么我正在寻找可以解决这个问题的答案或已知错误,谢谢。
【问题讨论】:
-
您能否将问题隔离为只是,比如金钱类型? (注意标题或标签中的术语“错误”或“错误” - 这些应该保留用于断言与完善的程序/库存在问题的极少数情况:)
-
@user2246674 货币类型没有问题,我怀疑是小数类型的问题。
-
@user2246674 这不是罕见的情况吗?我从未见过输入 123 的流程,因为它接受它,而 1234 不是接受的输入?
-
这篇文章没有包含足够的证据或足够的测试用例来断言 .NET 框架或核心库中存在错误的假设。我并不是说事实并非如此,而只是说这不足以开始探索“错误”(在非我的代码中)路线:)
-
代码在哪里?存储过程在哪里?您将参数传递给存储过程,而不是将它们直接存储到表中。如果有任何类型的转换问题,您需要先检查存储过程。我敢打赌,您会发现 @ItemwWeight 的定义与 decimal(38,6) 有所不同,或者存储过程代码本身存在一些奇怪的转换。例如。
varchar是从哪里来的? @ItemWeight 是定义为 varchar 还是在将其存储到表之前将其存储到 varchar 变量?
标签: c# asp.net sql sql-server tsql