如何使用 C# 将字典保存到数据库中?

How to save a dictionary into a database with C#?

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

  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?

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

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

Tutorial1 Tutorial2

使用 foreach 语句遍历字典。

这取决于是否...

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

  • 您希望数据可供人类阅读: XML 是一个选项,但不是那么快并且有点难以阅读和它仍然不可查询。但是,实施起来相当快。您还可以将结果转储到一个文件中,它仍然是可读的。此外,您可以与其他应用程序共享数据,因为 XML 是一种广泛使用的格式。

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

虽然 Entity 或 NHibernate 对于一个小问题来说可能显得有点笨重,但在其中积累一些专业知识总是很有趣的,因为内部概念是可重用的,一旦你掌握了它,它确实可以加快开发速度工作设置。