我是ASP.NET和SQL Server的新手,请原谅我的无知...如果我在C#中有数据结构(例如,假设一个存储一些字符串的向量),是否可以像在SQL表中那样存储向量的内容?我想这样做是为了尽快将数据尽快转换回向量形式,而不必逐个构造它。几乎就像将二进制数据写入文件,然后读取并将其复制到C中的分配结构一样。我已经在SQL Server 2008上创建了一个表,该表的字段定义为VARBINARY(MAX)。我以为我会从那开始。有人可以向我展示一个示例,说明我将如何在该字段中存储和检索一个包含10个字符串的向量?这是否有可能(我想不为什么)?谢谢! 最佳答案 首先,显而易见的途径是简单地创建关系结构并将对象映射到数据库中的字段。其次,如果您具有可序列化的对象,则可以将其存储在SQL Server中。我有时会这样做,并在SQL Server中使用了Text数据类型来存储XML。 意见:我更喜欢将序列化的对象存储为XML而不是二进制数据。 为什么?因为您实际上可以读取其中的内容(用于调试),所以在SQL Server中,您可以使用XQuery从序列化对象中选择数据。根据我的经验,与拥有易于调试且可以伪关系使用的数据相比,使用二进制数据获得的性能提升是不值得的。看一看SQL Server's XQuery capabilities。即使您不打算立即使用它,也没有理由将自己陷入困境。您可能会使用NetDataContractSerializer看一些示例。我相信您所说的向量是C#中的List 。看一下System.Collections.Generic。您可以使用NetDataContractSerializer序列化3个字符串的列表,例如:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;using System.IO;namespace SerializeThingy{ class Program { static void Main(string[] args) { List<string> myList = new List<string>(); myList.Add("One"); myList.Add("Two"); myList.Add("Three"); NetDataContractSerializer serializer = new NetDataContractSerializer(); MemoryStream stream = new MemoryStream(); serializer.Serialize(stream, myList); stream.Position = 0; Console.WriteLine(ASCIIEncoding.ASCII.GetString(stream.ToArray())); List<string> myList2 = (List<string>)serializer.Deserialize(stream); Console.WriteLine(myList2[0]); Console.ReadKey(); } }}此示例仅序列化一个列表,将序列化输出到控制台,然后证明它在反面已正确合并。我认为您可以从这里看到将内存流转储为字符串并将其写入数据库,或者使用内存流以外的其他流类型来执行此操作。记住要引用System.Runtime.Serialization来访问NetDataContractSerializer。关于c# - 将C#数据结构存储到SQL数据库中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/217187/
10-09 16:10
查看更多