截至目前,我遇到了这种错误
将数据类型float转换为十进制时出错。
或
将数据类型数字转换为十进制
时出错
这是我的代码
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
principalamt
和itemweight
时,它接受答案并将其视为小数,但是当我为1234
输入itemweight
时并123
Principalamt
显示该错误,如果我删除了转化并将其更改为Convert.ToDecimal
,则会显示Error converting data type Numeric to decimal
如果我将其用作文本,则会显示Error converting data type varchar to decimal
Decimal (38,6)
}}
这是一个错误还是什么?我似乎无法找到一种方法,我尝试了很多选项,但没有一种方法可以使用
我的数据库列如下:
我真的希望你能帮助我理解这种现象
修改
这是我第一次看到一个程序接受123作为有效输入,而1234不是,我的数据库{{1}}非常大,足以容纳这个输入,这就是为什么我正在寻找答案或可以解决的已知错误这个问题,谢谢。
答案 0 :(得分:0)
我建议使用Decimal.TryParse而不是Convert作为你的principalat值,然后调试并检查如何将值转换为Money列的有效Decimal。例如;
bool valid;
var dbl = Convert.ToDouble("1234.00");
valid = Double.TryParse("1234.00", out dbl);
var dcml = Convert.ToDecimal("1234.00");
valid = Decimal.TryParse("1234.00", out dcml);
在尝试将结果值存储在Decimal字段中时,我不确定是否应该使用Double作为数据类型。 Double表示浮动类型数字,我认为您应该使用this answer中提到的Money列的Decimal数据类型。
对于ItemWeight,数据类型为十进制(38,6),无论你认为舍入为何,最终都会得到6位小数。在SQL Server中尝试以下操作,并确保@ITEMPRINCIPALAMT的参数类型也是DECIMAL(类似于下面的示例)。
DECLARE @Var decimal(38,6) = 1234.00
DECLARE @Tbl AS TABLE
(
Test decimal(38,6)
)
INSERT INTO @Tbl (Test) Values (@Var)
SELECT * FROM @Tbl