1

截至目前,我遇到了这种错误

将数据类型浮点数转换为十进制时出错。

或者

将数据类型数字转换为十进制时出错

这是我的代码

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();
}

当我输入时,123forprincipalamt并且itemweight它接受答案并将其视为小数,但是当我输入1234foritemweight并且仍然123forPrincipalamt时它显示该错误,如果我删除转换并将其更改为Convert.ToDecimal它显示Error converting data type Numeric to decimal如果我将其用作显示的文本Error converting data type varchar to decimal

这是一个错误还是什么?我似乎找不到一种方法,我尝试了很多选择,但没有一个有效

我的数据库列如下:

我真的希望你能帮助我理解这个现象

编辑
这是我第一次看到一个程序接受 123 作为有效输入而 1234 不是,我的数据库Decimal (38,6)非常大,可以容纳这个输入,这就是为什么我正在寻找可以解决这个问题的答案或已知错误,谢谢你。

4

1 回答 1

0

我建议使用 Decimal.TryParse 而不是 Convert 作为您的 principalamt 值,然后可能调试和检查该值如何转换为您的 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表示浮点类型数字,我认为您应该对您的 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 
于 2013-09-24T03:32:43.163 回答