【问题标题】:How to save a table(DataTable) into a single cell in a database?如何将表(DataTable)保存到数据库中的单个单元格中?
【发布时间】:2010-11-20 07:22:06
【问题描述】:

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

【问题讨论】:

  • @Ahmad - 在您对 codemonkey4hire 的评论中,某些答案可能需要表格是什么意思?你的意思是在一些答案和他们的问题之间存在多对一的关系?您能否发布一些有关您的数据库设计的详细信息,因为我们可能会为您提供帮助。一般来说,除非必要,否则我倾向于避免在数据库中以不可查询的格式保存数据,例如ASP.NET Session State、用户上传的文档等
  • Table:(QuestionTables) Columns:(ID, QuestionID, DataOfTable) 我不需要查询那些保存的表,我只会将它们作为一个整体显示或删除它们。甚至不需要修改。

标签: c# .net sql datatable


【解决方案1】:

如果可能,我会在 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 完全正确 - XML 将 DataTable 序列化为 XML 字段并在需要时从那里读回
  • 所以我将它保存到 SQL 中的 XML 字段中?你能告诉我如何编写代码来做到这一点,因为我从来没有处理过这种数据类型吗?
  • 你得到了哪个 sql server 版本?
  • 谢谢老兄,这就是我要找的。但是您知道如何在 DataTable 之间传输 XmlDocument 吗?
【解决方案2】:

你到底为什么想要?

如果这是您要多次执行的操作,只需将其保存到一个新的 sql 表中,稍后再从该表中读取到您的 DataTable 中。

【讨论】:

  • 我正在创建一个问答系统,有些答案可能需要一张表格。
【解决方案3】:

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

我自己一直都在打破这条规则,但了解替代方法仍然很重要。

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

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

【讨论】:

  • 是的,但我每次都会有很多不同结构的表
猜你喜欢
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2010-09-25
  • 1970-01-01
相关资源
最近更新 更多