如何将表(DataTable)保存到数据库中的单个单元格中?

时间:2009-08-17 16:09:56

标签: c# .net sql datatable

是否可以在一个二进制类型的单元格中将DataTable保存到SQL数据库中,然后再将其读回DataTable?

3 个答案:

答案 0 :(得分:8)

如果可能的话,我会在sql数据库中创建一个xml字段,并将数据表保存为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 :(得分:2)

为什么你想要?

如果这是一项操作,您将不止一次,只需将其保存到新的sql表中,然后从表中读取到您的DataTable中。

答案 2 :(得分:0)

它只是打破了规范化规则 - 单元格中的值不是原子的。

我一直在打破这条规则,但是,理解替代方法仍然很重要。

您可以使用相关的表来存储他们的答案,而不是将所有答案值存储在单个单元格中。

关于下面的评论,您仍然可以使用相关表格进行操作。只需使用三列表:tableID,fieldID,value。每个tableID都可以拥有自己的fieldID集。权衡是使用值数据类型 - 它需要是一个字符串,这意味着您不会在后端获得日期或数字数据类型强制的优势。