如何使用 C# 将字典保存到数据库中?
How to save a dictionary into a database with C#?
我一直在使用以下方式将字典保存到数据库中:
- 将字典转换为 XML。
- 将此 XML 传递给 SP(存储过程)。
在SP中使用:
Select
Key1,
Value1
into #TempTable
FROM OPENXML(@handle, '//ValueSet/Values', 1)
WITH
(
key1 VARCHAR(MAX),
value1 varchar(100)
)
完成。
有没有办法将字典保存到数据库而不将其转换为 XML?
Serialize
字典,存储二进制数据。
然后将您的数据反序列化回 Dictionary
。
使用 foreach 语句遍历字典。
这取决于是否...
您希望存储数据:最快的方法(实现和性能)是二进制序列化(Protocol buffers例如)。但是,select 无法读取数据,每个需要读取数据的应用程序都必须使用相同的序列化(如果它存在于相同的 technology/language 中)。在我看来,它打破了 存储在 SQL 数据库中的目的 。
您希望数据可供人类阅读: XML 是一个选项,但不是那么快并且有点难以阅读和它仍然不可查询。但是,实施起来相当快。您还可以将结果转储到一个文件中,它仍然是可读的。此外,您可以与其他应用程序共享数据,因为 XML 是一种广泛使用的格式。
您希望数据可查询。 根据您的方式,实现起来可能并不那么容易。您将需要两张表(一张用于键,一张用于值)。然后您可以编写自己的自定义映射代码以将列映射到属性,或者您可以使用框架将对象映射到表,例如 Entity framework or NHibernate.
虽然 Entity 或 NHibernate 对于一个小问题来说可能显得有点笨重,但在其中积累一些专业知识总是很有趣的,因为内部概念是可重用的,一旦你掌握了它,它确实可以加快开发速度工作设置。
我一直在使用以下方式将字典保存到数据库中:
- 将字典转换为 XML。
- 将此 XML 传递给 SP(存储过程)。
在SP中使用:
Select Key1, Value1 into #TempTable FROM OPENXML(@handle, '//ValueSet/Values', 1) WITH ( key1 VARCHAR(MAX), value1 varchar(100) )
完成。
有没有办法将字典保存到数据库而不将其转换为 XML?
Serialize
字典,存储二进制数据。
然后将您的数据反序列化回 Dictionary
。
使用 foreach 语句遍历字典。
这取决于是否...
您希望存储数据:最快的方法(实现和性能)是二进制序列化(Protocol buffers例如)。但是,select 无法读取数据,每个需要读取数据的应用程序都必须使用相同的序列化(如果它存在于相同的 technology/language 中)。在我看来,它打破了 存储在 SQL 数据库中的目的 。
您希望数据可供人类阅读: XML 是一个选项,但不是那么快并且有点难以阅读和它仍然不可查询。但是,实施起来相当快。您还可以将结果转储到一个文件中,它仍然是可读的。此外,您可以与其他应用程序共享数据,因为 XML 是一种广泛使用的格式。
您希望数据可查询。 根据您的方式,实现起来可能并不那么容易。您将需要两张表(一张用于键,一张用于值)。然后您可以编写自己的自定义映射代码以将列映射到属性,或者您可以使用框架将对象映射到表,例如 Entity framework or NHibernate.
虽然 Entity 或 NHibernate 对于一个小问题来说可能显得有点笨重,但在其中积累一些专业知识总是很有趣的,因为内部概念是可重用的,一旦你掌握了它,它确实可以加快开发速度工作设置。