Получение DataTable из потока памяти. - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть таблица данных, которая отформатирована из массива имен столбцов, т.е.

        DataTable ThisTable = new DataTable();

        for (int i = 0; i <= col.GetUpperBound(0); i++)
        {
            try
            {
                ThisTable.Columns.Add(new DataColumn(col[i].ToString(), typeof(string)));
            }
            catch (Exception e)
            {
                MessageBox.Show("Uploader  Error"+e.ToString());
                return null; 
            }
        }

я затем использую объект BinaryFormatter для сериализации / десериализации потока памяти, чтобы я мог читать данныеиз потока в стол.По сути, пользователи будут загружать лист Excel, который будет считан в базу данных.Хотя я понимаю, что это возможно, Я НЕ хочу записывать лист на диск, а затем читать его в .

Однако, когда я иду, чтобы получить данные из вызова Deserialize(), я не получаю ошибку, однако я получаю пустой DataSet.

Mem будет моим объектом потока памяти.

        BinaryFormatter bformat = new BinaryFormatter();
        bformat.Serialize(Mem, ThisTable);
        Mem.Seek(0, SeekOrigin.Begin);
        byte[] bt = Mem.ToArray();


        Stream s = new MemoryStream(bt);
        Mem.Position = 0;            
        s.Position = 0; 
        ThisTable = (DataTable)bformat.Deserialize(Mem); 
        DS.Tables.Add(ThisTable);

        return DS;

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Если в приведенном вами примере кода нет ошибки, вы не заполняете DataTable какими-либо данными, вы просто создаете столбцы. Вы можете добавить строки в таблицу данных с помощью DataTable.Rows.Add():

foreach(var o in myDataSource)
{
    ThisTable.Rows.Add(o.Prop1, o.Prop2, etc);
}
0 голосов
/ 14 сентября 2011

Я бы предложил использовать OpenXml SDK для чтения файла Excel в DataTable.

Взгляните на ответ от M_R_H для примера:

Из Excel в DataTable в C # с открытым XML

Вы также можете посмотреть ответ Амурры здесь для другого примера:

при чтении Excel Open XML игнорируются пустые ячейки

...