valore modificato durante SqlBulkCopy

asp.net c# csv sqlbulkcopy sql-server

Domanda

Sto cercando di caricare alcuni dati dal file CSV al server SQL utilizzando SqlBulkCopy Il problema qui è che i valori vengono modificati automaticamente, ad esempio 0.9824 diventa 0.982400000095367

Ecco il codice che sto usando

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

Risposta accettata

Sembra che tu stia usando float che è un tipo di dati impreciso.
Usa decimale per ottenere valori esatti. La precisione e la scala dipendono dai tuoi dati



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché