我是 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/