回答

收藏

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

技术问答 技术问答 197 人阅读 | 0 人回复 | 2023-09-14

我是ASP.NET和SQL Server新手,请原谅我的无知…! ?5 n0 |. {7 ^" o5 \$ P" j
如果我在C#有一个数据结构(例如,让我们来谈谈存储一些字符串的向量),它能看起来像吗?SQL存储表中的向量内容?我认为这样做是为了尽快将数据转换为回向量,而不是逐个构建它。它几乎就像将二进制数据写入文件,然后读取并复制到文件中C分布结构相同。
( y3 E7 ~* |- D+ l我已经在SQL Server 在2008年创建了一个表,定义为表的字段VARBINARY(MAX)。我以为我会从那开始。* p" a. n& n& D% a4 _% p5 f$ [
有人可以向我展示一个例子,解释我将如何存储和检索包含10个字符串的向量?这有可能吗(我不这么认为)?
  d( m) v. T1 n* T* o谢谢!  o+ {  R5 z* D6 D) K2 S4 q7 l
                                                               
$ H, ]. o3 t3 o* i$ p/ t/ \    解决方案:                                                               
& f: l) [+ i( c0 Y3 q1 J6 z                                                                首先,明显的方法是简单地创建关系结构,并将对象映射到数据库中。
: _4 {! d: j0 r其次,如果你有一个可序列化的对象,你可以把它存储在里面SQL Server中。我有时会这样做,并在SQL Server中使用了Text存储数据类型XML。
. g1 k# _) z# L2 l1 k$ K意见:我更喜欢将序列化对象存储为XML而不是二进制数据。    为什么?因为你其实可以读内容(用于调试),所以在SQL9 r: `3 g* N+ d) G5 a& l8 c! N
Server你可以用它XQuery从序列对象中选择数据。根据我的经验,与易于调试和伪关系的数据相比,使用二进制数据不值得提高性能。SQL$ ^  p1 K" \5 x7 T6 k
Server的XQuery功能。即使不打算马上用,也没有理由陷入困境。' I2 m# N- {, m2 {
你可能会看到一些使用NetDataContractSerializer的示例。" w# U6 a0 V' C0 ?2 i
我相信你所说的向量是C#中的List5 z0 z0 @+ e- i5 q: s1 r# ]+ N: I
。看一下System.Collections.Generic。您可以使用NetDataContractSerializer序列化三个字符串的列表,如:) X& Q; Y$ E4 M( }
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 myList = new List();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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 myList2 = (List)serializer.Deserialize(stream);            Console.WriteLine(myList2[0]);            Console.ReadKey();        }    }}这个例子只是一个序列化列表,将序列化输出到控制台,然后证明它已经正确合并在反面。我认为您可以看到将内存流转存储为字符串并写入数据库,或使用内存流以外的其他流类型来执行此操作。
  M8 r4 i: A4 x0 L6 h$ n2 q记住要引用System.Runtime.Serialization来访问NetDataContractSerializer。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则