【问题标题】:How to save a dictionary into a database with C#?如何使用 C# 将字典保存到数据库中?
【发布时间】:2016-01-29 17:50:03
【问题描述】:

我一直在使用以下方式将字典保存到数据库中:

  1. 将字典转换为 XML。
  2. 将此 XML 传递给 SP(存储过程)。
  3. 在SP中使用:

    Select 
        Key1,                   
        Value1
    into #TempTable                                      
    FROM OPENXML(@handle, '//ValueSet/Values', 1)
    WITH 
    (                                  
      key1 VARCHAR(MAX),     
      value1 varchar(100)  
    )
    
  4. 完成。

有没有办法将字典保存到数据库而不将其转换为 XML?

【问题讨论】:

  • 只需将键和值保存到数据库中表的相应列中即可。字典里有什么?
  • 键-字符串和值-字符串
  • 如何创建一个包含键值列的表?
  • @NedStoyanov 如果我循环字典并在 Sp 中为每个“键值对”传递参数会有效吗?
  • 您可以将所有键和值的列表传递给 SP,请参阅stackoverflow.com/a/43767/1239433

标签: c# .net relational-database


【解决方案1】:

这取决于是否...

  • 您希望存储数据: 最快的方法(实现和性能)是二进制序列化(例如Protocol buffers)。但是,数据不能通过 select 读取,并且需要读取数据的每个应用程序都必须使用相同的序列化(如果它以相同的技术/语言存在)。在我看来,它打破了存储在 SQL 数据库中的目的

  • 您希望数据可供人类阅读: XML 是一种选择,虽然速度不快,阅读起来有点困难,但仍无法查询。但是,它的实施速度非常快。您还可以将结果转储到文件中,并且仍然可以读取。此外,您可以与其他应用程序共享数据,因为 XML 是一种广泛使用的格式。

  • 您希望数据可查询。根据您的方式,实现起来可能并不容易。您需要两张表(一张用于键,一张用于值)。然后,您可以编写自己的自定义映射代码将列映射到属性,也可以使用框架将对象映射到表,例如 Entity frameworkNHibernate

虽然 Entity 或 NHibernate 对于一个小问题可能看起来有点像瑞士刀,但在其中建立一些专业知识总是很有趣,因为内部概念是可重复使用的,并且一旦你有了工作设置,它就可以真正加快开发速度.

【讨论】:

    【解决方案2】:

    Serialize字典,并存储二进制数据。

    然后将您的数据反序列化回Dictionary

    Tutorial1Tutorial2

    【讨论】:

      【解决方案3】:

      使用 foreach 语句遍历字典。

      【讨论】:

      • 会有效率吗?我不这么认为。
      猜你喜欢
      • 2021-05-08
      • 1970-01-01
      • 2015-08-04
      • 2017-01-27
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多