C# Excel文件上载更改数据类型

C# Excel文件上载更改数据类型,c#,C#,我必须上传excel文件,我有一个格式正确的excel文件,我有一个包含大量数字的列,所以在excel中,它用指数显示数字,例如我有这个值8.99681E+18(8996812351321100000) 我通过在运行时读取数据表来生成数据表,在生成数据表之后,该值被更改为(8996812351321100288)。 我就是这样做的 var conn = new OleDbConnection(); if (fileExtension == ".xls") //4.0 Connect

我必须上传excel文件,我有一个格式正确的excel文件,我有一个包含大量数字的列,所以在excel中,它用指数显示数字,例如我有这个值8.99681E+18(8996812351321100000)

我通过在运行时读取数据表来生成数据表,在生成数据表之后,该值被更改为(8996812351321100288)。 我就是这样做的

var conn = new OleDbConnection();
 if (fileExtension == ".xls")
      //4.0 Connection String
 if (fileExtension == ".xlsx")
                //12.0 Connection String

           conn.Open();
            DataTable dtSheets = conn.GetSchema("Tables");
            string firstSheet = dtSheets.Rows[0]["TABLE_NAME"].ToString();
            using (var comm = new OleDbCommand())
            {
                comm.CommandText = "select * from [" + firstSheet + "]";
                comm.Connection = conn;                
                using (var da = new OleDbDataAdapter())
                {
                    da.SelectCommand = comm;
                    da.Fill(dt);
                    if (dt.Columns.Contains("SIMNo"))
                    {
                        DataTable dtCloned = dt.Clone();
                        dtCloned.Columns["SIMNo"].DataType = typeof(Int64);
                        foreach (DataRow row in dt.Rows)
                        {
                            dtCloned.ImportRow(row);
                        }
                        return dtCloned;
                    }
                    return dt;
                }
            }

在创建DataTable之前,有没有一种方法可以在运行时更改SIMNo的数据类型?我该怎么做

8996812351321100000.0
转换为
Int64
会产生精确的舍入误差

(Int64)8996812351321100000.0 // == 8996812351321100288 

相反,请使用
decimal
数据类型,因为它旨在表示十进制数字,而不存在舍入问题。或者,因为它是一个不会应用任何算术运算的数字,所以只需使用
字符串

我认为,BigInt应该会有所帮助

http://www.carljohansen.co.uk/bigint/.

将8996812351321100000从一个多头铸造到一个双倍,产生89968123513211E+18,这是你想要的,而不是你试图在这里做的吗?问题发生在哪里?是在
dt
中还是在
dtCloned
中?@TimRogers其在dtCloned中我将8996812351321e+18转换为双精度,它给我8996812351321100288而不是89968123513211000000,所以我应该使用十进制或字符串而不是Int64?字符串转换是将数字作为指数,我希望它没有指数(8996812351321100000)(无小数)@SyedSalmanRazaZaidi手动转换或使用
decimal