C# 在asp.net中将varchar转换为数据类型numeric时出现算术溢出错误
我正在尝试插入一个有小数点的记录,例如:7654.00,此列的数据类型为C# 在asp.net中将varchar转换为数据类型numeric时出现算术溢出错误,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我正在尝试插入一个有小数点的记录,例如:7654.00,此列的数据类型为数值(10,12),但我遇到算术溢出错误,我知道我需要先进行转换,但不确定如何转换 我遇到问题的列是TotalCost 以下是我所拥有的: string FullName = row.Cells[1].Text; string TotalCost = row.Cells[6].ToString(); using (SqlConnection myCon = new SqlConnection(myConnStr)) {
数值(10,12)
,但我遇到算术溢出错误,我知道我需要先进行转换,但不确定如何转换
我遇到问题的列是TotalCost
以下是我所拥有的:
string FullName = row.Cells[1].Text;
string TotalCost = row.Cells[6].ToString();
using (SqlConnection myCon = new SqlConnection(myConnStr))
{
using (SqlCommand myCmd = new SqlCommand())
{
myCmd.Connection = myCon;
myCmd.CommandType = CommandType.Text;
myCmd.CommandText = @"insert into myTable (FullName, TotalCost)
values(@FullName, @TotalCost)";
myCmd.Parameters.AddWithValue("@FullName", FullName.ToString());
myCmd.Parameters.AddWithValue("@TotalCost", TotalCost)
myCon.Open();
myCmd.ExecuteNonQuery();
myCon.Close();
}
}
AddWithValue是添加参数的便捷快捷方式,但正如这两篇博文中所解释的,它有严重的限制
在本例中,您将字符串作为参数
@TotalCost
和AddWithValue
的AddWithValue
中的第二个参数传递,然后将字符串传递给数据库引擎,导致上述错误
您应该将字符串转换为十进制值(对于货币值使用十进制似乎更合适),然后使用更明确的数据类型声明添加参数
string TotalCost = row.Cells[6].ToString();
decimal cost;
if(!decimal.TryParse(TotalCost, out cost))
// Put here an error message for your user
// "The value cannot be converted to a decimal value"
else
{
using (SqlConnection myCon = new SqlConnection(myConnStr))
using (SqlCommand myCmd = new SqlCommand())
{
myCmd.Connection = myCon;
myCmd.CommandType = CommandType.Text;
myCmd.CommandText = @"insert into myTable (FullName, TotalCost )
values(@FullName, @TotalCost)";
myCmd.Parameters.Add("@FullName", SqlDbType.NVarChar).Value = FullName;
myCmd.Parameters.Add("@TotalCost", SqlDbType.Decimal).Value = cost;
myCon.Open();
myCmd.ExecuteNonQuery();
}
}
当然,您应该根据数据表上
TotalCost
列的实际数据类型调整此代码如果TotalCost
是数字,则需要将其转换为十进制\双精度,然后作为myCmd.Parameters.AddWithValue(“@TotalCosts”)传递
AddWithValue无法知道如果第二个参数是字符串,则传递的是double。避免使用数字(10,12)
是不可能的-这意味着一个包含10位数字的数字,其中12位位于小数点的右侧。。。。