Member 13799709 Ответов: 1

Как предотвратить усечение данных excel с плавающей запятой, загруженных с помощью SQL


Когда я загружаю данные с плавающей запятой из Excel в свое программное обеспечение C# с помощью SQL, данные в конечном итоге усекаются.

Например, вместо 0,054034 я в конечном итоге с 0,054.

Что я уже пробовал:

В соответствующей части мой код:

DataTable part8 = new DataTable();
part8 = loadData(path, "SELECT * FROM [Gaszähler$X13:Y]");
Console.WriteLine(part8.Rows[10][1]);

private DataTable loadData(String path, String command)
{
    String filepath = path;
    String db_command = command;

    OleDbDataAdapter adapter = fetch(filepath, db_command);
    DataSet set = new DataSet();
    DataTable returntable = new DataTable();
    adapter.Fill(set, "table1");
    returntable = set.Tables["table1"];

    return returntable;
}

public OleDbDataAdapter fetch(string filepath, string com)
{
    OleDbConnection conn = new OleDbConnection(); // Die Verbindung
    string ConStr = // Der Connectionstring
         @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + filepath
        + @";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0""";

    conn.ConnectionString = ConStr; //Der Connectionstring wird gesetzt

    OleDbCommand command = new OleDbCommand // Das OleDb Kommando
        (
            com, conn
        );
    OleDbDataAdapter myAdapter = new OleDbDataAdapter(command); // Ein Adapter

    return myAdapter;
}

1 Ответов

Рейтинг:
1

Jochen Arndt

Значения не усекаются, а печатаются с точностью по умолчанию при использовании WriteLine(double) который звонит Двойной.Метод ToString (Система)[^].

Для указания точности используйте один из следующих способов: Double.ToString() перегрузки, которые принимают строку формата, например Двойной.Метод ToString (String) (System)[^].


Member 13799709

Значение фактически усечено, в другой функции я передаю его в другую таблицу excel, где ему не хватает нескольких цифр

Jochen Arndt

Он не усекается до тех пор, пока он считывается и сохраняется как двойной. Но он будет усечен при преобразовании в строку, как при печати или передаче в качестве строки в интерфейс экспорта.

Если вы, например, используете интерфейс базы данных для экспорта (например, OLEDB), вы должны использовать параметризованные команды, чтобы гарантировать, что он передается как double и передает его как таковой, а не как string.