c# - 将 C# 数据结构存储到 SQL 数据库中

标签 c# asp.net sql data-structures

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

相关文章:

c# - 将变量传递给验证器

SQL 左连接 - 如果 TableB 中两个值都不为 null 或 TableB 中缺少行,则获取值

php - 在 codeigniter 中通过查询转义订单

c# - 将 json 文件保存到文本文件中

c# - C# 和 VB6 mdi 应用程序之间的消息互操作

c# - 如何在十六进制和十进制之间转换数字

c# - Microsoft Office Access 数据库引擎无法打开或写入文件 ''

c# - 从 web.config 文件获取 sql 连接字符串

asp.net - 出现空值时使用大小写合并 SQL 列

mysql - 添加两个 SUM DISTINCT 值,MySQL