【问题标题】:Is there an easy way to store an array into a single column in a SQL Server CE database?有没有一种简单的方法可以将数组存储到 SQL Server CE 数据库中的单个列中?
【发布时间】:2013-03-26 15:39:05
【问题描述】:

我在这里查看了可能的答案(我认为是 PHP 的):http://www.lateralcode.com/store-array-database/ 但我无法找到序列化/反序列化的 C#.net 版本。

这是否会与我上面的链接中显示的方式相同,还是在给定环境的情况下我应该使用完全不同的方法?

我只是不想为我的 9 个不同数组中的每一个中的 12 个值中的每一个都有一堆不同的列,所以如果有另一种方法来实现这一点(转换为 byte[] 等)我我非常愿意听。

如果有帮助,数组将是简单的 string[] 数组。

【问题讨论】:

  • 你为什么不简单地var a = String.Join(",",arrays); 并将 a 存储在数据库中?并像var arr= a.Split(","); 一样将其取回
  • 使用这种方法最好使用分隔符,该分隔符不太可能位于数组值之一中,例如“|||”或类似的东西。
  • 尝试修改此示例:sqlcebulkcopy.codeplex.com
  • @ManishMishra 无论如何您可以发布答案吗?这似乎是一个非常好的方法,应该成为一个公认的答案,如果它有效(我不明白为什么它不会,只要更像​​“|||”的东西用作分隔符,而不是“ ”,正如弗拉基米尔建议的那样)。

标签: c# sql-server-ce webmatrix asp.net-webpages


【解决方案1】:

将您的字符串数组转换为单个字符串,如下所示:

 var a = String.Join(",",arrays); 

 //or aim is to provide a unique separator, 
 //i.e which won't be the part of string values itself.
 var a= String.Join("~~",arrays); 

然后像这样取回它:

var arr = a.Split(',');
//or split via multiple character 
var arr = a.Split(new string[] { "~~" }, StringSplitOptions.None);

【讨论】:

  • 您能否使用“,”作为分隔符进行编辑,因为该值很容易成为字符串本身中的自然文本,因为它们是从用户输入中存储的?
  • 基本上想法是以某种方式加入您的字符串,您可以稍后轻松拆分它以获得原始字符串数组
  • 对,当然,我明白了,我只是在想未来的观众,但我想如果他们不明白,他们应该使用与他们的字符串值不同的分隔符,这是真的无论如何,可能对他们没有帮助,哈哈。感谢您的回答,现在看起来很明显,但我知道我必须确保我的回答没有违反任何最佳实践或任何内容。
  • 不过,有一件事,您可能希望在使用“Split()”时更改示例代码,该代码会引发错误(“Split 的最佳重载方法有一些无效参数”)。
  • 好吧,我这么说,但是在查看语法后,我几乎看到了你向我展示的内容,所以我想是时候看看“我的”值了 :)
【解决方案2】:

尝试这个序列化数组并在 Blob 类型的数据库中创建一个列来存储字节数组。

序列化:

 if(array == null)
        return null;
 BinaryFormatter bf = new BinaryFormatter();
 MemoryStream ms = new MemoryStream();
 bf.Serialize(ms, array);

反序列化:

String[] array = new String[10];        
BinaryFormatter bf = new BinaryFormatter();     
ms.Position = 0;        
array = (String[])bf.Deserialize(ms);

【讨论】:

  • 你能用这个方法展示一个反序列化的例子吗?另外,为了确定,这个答案是否可以用于 sql-server-ce(使用 WebMatrix)?
  • 终于有机会看看这个了。 +1 通过序列化/反序列化执行此操作(连接字符串可能不适用于所有人)。如果可以向我展示我不知道的新方法,我会再给 +1!谢谢!
  • 我知道这是旧的,但请不要使用二进制格式化程序,它现在被归类为不安全代码。
【解决方案3】:

我只是不想为每个 我的 9 个不同数组中的每一个都有 12 个值,所以如果还有另一个 实现这一目标的方法(转换为 byte[] 等)我不止 愿意听。

从上面的描述看来,您使用的是 RDBMS。

您希望在单个列中存储多个值的事实表明设计存在问题。

我同意单独的列可能不是要走的路,特别是如果每​​个数组中的项目数将来可能会发生变化。

考虑将此数据分离到一个单独的表中,并通过外键关系与原始表进行一对多映射

【讨论】:

  • 我想知道我是否忽略了这一点。我确实知道什么是一对多关系,但我已经很久没有练习过这种方法了。在这里展示一个例子可能是有益的(对于未来的观众)。考虑到这种情况,这是一个非常好的答案。
  • 这篇维基百科文章解释了如何创建外键en.wikipedia.org/wiki/Foreign_key
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多