将c#对象存储在sql server数据库

时间:2017-06-30 12:14:19

标签: c# sql-server json sql-server-2014 serializable

我想在SQL服务器中存储一个c#对象。我想到了以下几个选项:

  1. 读取对象字节内存流并将其保存到数据库中(但是 在sql中不可读)
  2. Json,可读,易于转换但是什么数据类型? (仅限sql 2016的数据类型)
  3. XML,可读性稍差,易于转换,有XML dataType
  4. 在sql列中存储C#对象的最佳做法是什么?为什么? 我正在使用SQL 2014,所以我认为选项3是最好的?

    编辑: 注意:它不是要查询的数据,我只想加载一个已缓存到内存中的c#对象的对象。并在c#中执行一些逻辑。从另一个数据库获取数据只需要一段时间,因此我将所有数据保存在自定义对象中。因此,我认为我不应该使用ORM

3 个答案:

答案 0 :(得分:1)

如果只是为了在某个数据库中稍后用密钥读回数据库,那么请使用(2)并使用nvarchar(max)字段类型。

如果要查询的数据,那么您应该设计一个匹配并使用ORM的模式。

答案 1 :(得分:0)

如果你对选项B更加肯定,那么你可以将sql server中任何对象[或数据类型]的json序列化字符串存储为NVARCHAR(MAX)字段。

当您想要阅读它时,您可以轻松地以原始格式反序列化该字符串。

e.g。

Demo d1=new Demo();

//store this json into database.
string json= JsonConvert.SerializeObject(d);

// Now while reading fron db
Demo d2= JsonConvert.DeserializeObject<Demo>(json);

答案 2 :(得分:0)

我会选择JSON序列化,它只是文本,因此在存储诸如“用户配置文件设置”或其他类型的结构数据之类的内容时,您可以阅读和编写任何语言的JSON。现在SQL服务器也已经理解了这一点,就像8到10年前大肆宣传的XML支持一样,现在可以为那些需要更新数据的人提供大量TSQL支持的JSON,比如当你需要修复所有数据时所有用户的更新......

无论如何,请看一下这篇文章。 JSON in SQL Server 2016-2017 当往返于JSON时,您应该测试您的属性,因为某些数据类型可能无法前后转换,具体取决于区域特定设置(如日期和小数值)。