在从C#到SQL服务器没有任何不精确的情况下使程序插入实际数字时遇到很多麻烦。
例如,以下是在推送到SQL Server之前如何在C#中处理数据的代码:
DataTable dt = new DataTable();
dt.Columns.Add("Number", typeof(double));
dt.Rows.Add(6.5);
dt.Rows.Add(7);
dt.Rows.Add(8);
SqlConnection con;
string sqlCmd;
SqlCommand cmd;
using (con = new SqlConnection(Common.DBLink))
{
con.Open();
SqlBulkCopy bulkCopy = new SqlBulkCopy(con);
bulkCopy.DestinationTableName = "NumberTable";
bulkCopy.WriteToServer(dt);
con.Close();
}
但如果我有一个像2.85这样的数字,它会被插入为2.8499。 SQL列是DECIMAL(10,4)
数据类型。这只发生在很少的数字上。对于像12.5或20这样的值,它永远不会发生。
答案 0 :(得分:5)
如果您需要decimal
值,请不要将其double
存储在DataTable
中。
将列类型更改为decimal
并再次尝试:
dt.Columns.Add("Number", typeof(decimal));
您可以通过搜索" c#double vs decimal" 找到很多有用的信息,例如this SO post或Jon Skeet的文章Decimals和Doubles。