2009-08-17 2 views
2

Возможно ли сохранить DataTable в базу данных SQL в одной ячейке двоичного типа, например, и прочитать ее снова в DataTable?Как сохранить таблицу (DataTable) в одну ячейку в базе данных?

+0

@Ahmad - В вашем комментарии к codemonkey4hire, что подразумевается под некоторыми ответами, может потребоваться таблица? Вы имеете в виду, что между некоторыми ответами и их вопросами существует много отношений. Можете ли вы опубликовать некоторые сведения о своем дизайне базы данных, поскольку мы сможем помочь вам в этом. Вообще говоря, я был бы склонен избегать наличия данных в базе данных в формате без запроса, если это необходимо, например, Состояние сеанса ASP.NET, документы, загруженные пользователем и т. Д. –

+0

Таблица: (QuestionTables) Столбцы: (ID, QuestionID, DataOfTable) Мне не нужно запрашивать эти сохраненные таблицы, я буду показывать их только как целый блок или удалить их. Даже не нужно изменять. –

ответ

8

Я хотел бы создать, если это возможно, поле XML внутри базы данных SQL и сохранить DataTable как XML

XML Support in Microsoft SQL Server 2005

и

C# and Vb.net example for XML data type tips in SQL Server 2005

поможет вам

другой пример взяли с here

protected bool LoadXml(SqlConnection cn, XmlDocument doc) 
    { 
    //Reading the xml from the database 
    string sql = @"SELECT Id, XmlField FROM TABLE_WITH_XML_FIELD WHERE Id = @Id"; 
    SqlCommand cm = new SqlCommand(sql, cn); 
    cm.Parameters.Add(new SqlParameter("@Id",1)); 
    using (SqlDataReader dr = cm.ExecuteReader()) 
    { 
      if (dr.Read()) 
      { 
         SqlXml MyXml= dr.GetSqlXml(dr.GetOrdinal("XmlField")); 
         doc.LoadXml(MyXml.Value); 
         return true; 
      } 
      else 
      { 
         return false; 
      } 
    } 
    } 
+1

+1 точно - XML ​​сериализует DataTable в поле XML и читает его обратно оттуда, когда это необходимо –

+0

Итак, я сохраняю его в поле XML в SQL? Не могли бы вы показать мне, как написать код, который делает это, потому что я никогда не рассматривал этот тип данных? –

+0

, какую версию сервера SQL Server вы получили? – Fredou

2

Почему бы вам не захотеть?

Если это операция, которую вы собираетесь делать более одного раза, просто сохраните ее в новой таблице sql и прочитайте из таблицы в свой DataTable позже.

+0

Я создаю систему вопросов и ответов, а для некоторых ответов может потребоваться таблица. –

0

Он просто нарушает правила нормализации - значение в ячейке не является атомарным.

Я все время нарушаю это правило, но все же важно понимать альтернативные подходы.

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

Что касается вашего комментария ниже, вы можете сделать это со связанной таблицей. Просто используйте таблицу с тремя столбцами: tableID, fieldID, value. Каждый идентификатор таблицы может иметь свой собственный набор идентификаторов fieldID. Компромисс связан со значением типа данных - он должен быть строкой, что означает, что вы не получаете преимущества применения даты или числового типа данных на вашем заднем конце.

+1

Да, но у меня будет много таблиц с разными структурами каждый раз –