c# - 在 SqlBulkCopy 期间更改值

标签 c# asp.net sql-server csv sqlbulkcopy

我正在尝试使用 SqlBulkCopy 将一些数据从 csv 文件上传到 sql server 这里的问题是值会自动更改 例如 0.9824 变成 0.982400000095367

这是我使用的代码

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(strConnectionString, SqlBulkCopyOptions.FireTriggers))
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("dt", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("wreb", typeof(string)));
            dt.Columns.Add(new DataColumn("zid", typeof(int)));
            dt.Columns.Add(new DataColumn("zone_name", typeof(string)));
            dt.Columns.Add(new DataColumn("region", typeof(string)));
            dt.Columns.Add(new DataColumn("iloss", typeof(float)));
            dt.Columns.Add(new DataColumn("dloss", typeof(float)));

            for (int i = 0; i < DataDS.Tables[0].Rows.Count; i++)
            {
                DataRow myDr = dt.NewRow();
                myDr["dt"] = DateTime.ParseExact(DataDS.Tables[0].Rows[i]["dt"].ToString(), "d/M/yyyy", null);
                myDr["wreb"] = DataDS.Tables[0].Rows[i]["wreb"].ToString();
                myDr["zid"] = DataDS.Tables[0].Rows[i]["zid"].ToString();
                myDr["zone_name"] = DataDS.Tables[0].Rows[i]["zone_name"].ToString();
                myDr["region"] = DataDS.Tables[0].Rows[i]["region"].ToString();
                myDr["iloss"] = DataDS.Tables[0].Rows[i]["iloss"].ToString();
                myDr["dloss"] = DataDS.Tables[0].Rows[i]["dloss"].ToString();
                dt.Rows.Add(myDr);
                myDr = null;
            }
            bulkCopy.BulkCopyTimeout = 0;
            bulkCopy.ColumnMappings.Add("dt", "Zdate");
            bulkCopy.ColumnMappings.Add("wreb", "Entity");
            bulkCopy.ColumnMappings.Add("zid", "ZoneID");
            bulkCopy.ColumnMappings.Add("zone_name", "Zone_Name");
            bulkCopy.ColumnMappings.Add("region", "region");
            bulkCopy.ColumnMappings.Add("iloss", "iloss");
            bulkCopy.ColumnMappings.Add("dloss", "dloss");
            bulkCopy.DestinationTableName = "tbl_zloss";
            bulkCopy.WriteToServer(dt);
        }

最佳答案

看起来您正在使用 float这是一种不精确的数据类型。
使用 decimal获得精确值。精度和规模取决于您的数据

关于c# - 在 SqlBulkCopy 期间更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23155735/

相关文章:

sql - 添加列是否删除数据

sql-server - T-SQL 中的 'when keyword' 有何用途?

c# - 是否可以在编译时/运行时在 C# 中生成所有标记字符串的列表?

c# - 不同构建的替代启动对象

c# - 许多站点接受订单;一个 Paypal 账户

c# - 我在 C# 中有一个 2d (n x n) 字符串数组,如何将它动态地输出到网页(尝试过数据表/绑定(bind)等...)

sql - FULL OUTER JOIN有点内

c# - 在返回 IEnumerable 的方法中使用锁时,linq 延迟执行

c# - 无法将表达式类型转换为返回类型

javascript - 如何从全日历年 View 中隐藏上个月和下个月的日期和事件?