Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сериализация DataSet / 2 сообщений из 2, страница 1 из 1
20.03.2011, 21:39
    #37174506
Сашша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DataSet
Добрый день!
Сериализую обьект:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
1

 
System.Xml.Serialization.XmlSerializer ser =
                new System.Xml.Serialization.XmlSerializer(typeof(DataSet));
 
            DataSet dSet = new DataSet();
            DataTable dTable = new DataTable();
 
 
            for (int i = 0; i < dgvProduct.Columns.Count; i++)
            {
                //добавили колонки
                dTable.Columns.Add(new DataColumn(dgvProduct.Columns[i].HeaderText));
            }
 
            for (int j = 0; j < dgvProduct.Rows.Count; j++)
            {
                DataRow r = dTable.NewRow();
                for (int i = 0; i < dgvProduct.Columns.Count; i++)
                {
                    if (dgvProduct.Rows[j].Cells[i].Value != null)
                    {
                        r[i] = dgvProduct.Rows[j].Cells[i].Value.ToString();
                    }
                    else
                    {
                        r[i] = "";
                    }
                }
                dTable.Rows.Add(r);
            }
 
            dSet.Tables.Add(dTable);
 
            dgvProduct.Columns.Clear();
 
            dgvProduct.DataSource = dSet.Tables[0];
 
            dgvProduct.Columns[1].Width = 400; //это надо где-нить в свойствах таблицы прописать            
 
            System.IO.TextWriter tWriter = new System.IO.StreamWriter(@"C:\d.xml");
            ser.Serialize(tWriter, dSet);
            tWriter.Close();
Все работает=)

Отлично сериализуется, все дела

В той же программе:
я получаю данные не из обычного текстового файла, а из екселя sql-запросами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        public void GetFrom(string name, System.Windows.Forms.DataGridView dgv)
        {
            System.Data.DataSet ds = new System.Data.DataSet();
 
            string ConnectionString =
                String.Format(
                "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=No\";Data Source={0}", name);
 
            OleDbConnection cn = new OleDbConnection(ConnectionString);
            cn.Open();
 
            // Получаем списко листов в файле            
            //System.Data.DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
            //    new object[] { null, null, null, "TABLE" });
 
            // Берем номер листа
            //string sheet1 = (string)schemaTable.Rows[0].ItemArray[2];
            string select = String.Format("SELECT * FROM [{0}]", @"Заказ$");
 
            OleDbDataAdapter ad = new OleDbDataAdapter(select, cn);
            this.Table = new System.Data.DataTable();
            ad.Fill(this.Table);
 
            dgv.DataSource = this.Table;
        }

считываю их в DataGV, все отлично отображается)

далее, я пытаюсь его сериализовать:

Код: plaintext
1.
2.
3.
4.
5.
                        CamIn.GetFrom(openFileDialogComeIn.FileName, dgv);
                        //    this.Add_ComeIn(openFileDialogComeIn.FileName, folds[0]);
                                                
                        this.ToFolds(folds[0], openFileDialogComeIn.SafeFileName, CamIn.Table);
 
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
            System.IO.StreamWriter sW = new System.IO.StreamWriter(@"1.xml");
            //System.Xml.XmlWriter wr = new System.Xml.XmlTextWriter(@"DFolders1.xml", Encoding.UTF8);
            //System.IO.StreamWriter sW = new System.IO.StreamWriter(@"DFolders1.xml");
            //System.IO.FileStream fS = new System.IO.FileStream(@"DFolders.xml", System.IO.FileMode.OpenOrCreate);
            
 
            System.Xml.Serialization.XmlSerializer ser =
                new System.Xml.Serialization.XmlSerializer(typeof(DataSet));
            DataSet dSET = folds.ToData();
 
 
            ser.Serialize(sW, dSET);
 
            //bf.Serialize(fS, DFolds);//не получается сериализовать? почему?
            sW.Close();

но он сериализует только названия таблиц.

Странно думаю, делаю стоп-пойнт на строчке

DataSet dSET = folds.ToData();
Думаю, может они в датасете не записаны: читаю каждую строчку в Immidiat Window - все отлично, каждый элемент на своем месте

Нажимаю Ф5 - и в следующей строчке ничего не сериализуется опять, кроме названия таблиц?

Что за дела? Уже вторые сутки мучаюсь? Готов поверить в любую теорию, Он почемуто не сериализует именно данные считанные из эксель, потому что когда я добавил в последний код запись:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
           DataTable dTabl = new DataTable("NewTabl");
            DataColumn dC = new DataColumn("NewCol");
            dTabl.Columns.Add(dC);

            DataRow dR = dTabl.NewRow();
            dR["NewCol"] = "Item";
            dTabl.Rows.Add(dR);
            dSET.Tables.Add(dTabl);
он ее спокойно сериализовал :)
...
Рейтинг: 0 / 0
20.03.2011, 21:49
    #37174515
Сашша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DataSet
чтобы не было путаницы открою код пары приведенных выше функций:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
       public void ToFolds(DFolder f, string firm, DataTable _table)
        {
 
 
            for (int i = 0; i < _table.Rows.Count; i++)
            {
                DString dS = new DString();
                dS.Art = Convert.ToInt32(DateTime.Today.Day.ToString() +
                    DateTime.Today.Month.ToString() +
                    DateTime.Today.Year.ToString() +
                    DateTime.Today.TimeOfDay.Hours.ToString()) + i;
                dS.Name = Convert.ToString(_table.Rows[i].ItemArray[0]);
                dS.theCount = Convert.ToInt32(_table.Rows[i].ItemArray[1]);
                dS.Firstcost = Convert.ToInt32(_table.Rows[i].ItemArray[2]);
                dS.Secondcost = Convert.ToInt32(_table.Rows[i].ItemArray[3]);
                dS.theDate = DateTime.Today.Date;
                dS.Firm = firm;
                dS.ParentFolder = f;
 
                f.Add(dS);
            }
 
        }
и
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
        public System.Data.DataSet ToData()
        {
            System.Data.DataSet dS = new System.Data.DataSet();
            for (int i = 0; i < this.Count; i++)
            {
                dS.Tables.Add(this[i].Name);
 
                for (int c =0; c<6;c++)
                {
                    dS.Tables[i].Columns.Add("Столбец" + c.ToString());
                }
 
                //создало колонки
 
                for (int n = 0; n < this[i].Count; n++)
                {
 
                    dS.Tables[i].Rows.Add(
                        new string[]{
                            (string)this[i][n].Art.ToString().Clone(),
                            (string)this[i][n].Name.ToString().Clone(),
                            (string)this[i][n].theCount.ToString().Clone(),
                            (string)this[i][n].Firstcost.ToString().Clone(),
                            (string)this[i][n].Secondcost.ToString().Clone(),
                            (string)this[i][n].Firm.ToString().Clone()
                        });
 
                }
                //создало строки
            }

(string)this[i][n].Secondcost.ToString().Clone(), - это уже просто от отчаяния, мало ли может этот OLEDB ссылочный: читает базы и после удаления убивает все, что прочитал.

В общем сложная ситуация, кто может что сказать?
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сериализация DataSet / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]