我正在研究一个实验项目的应用程序,我正在用C#编写它。它应该从我们用来运行测试的应用程序导出的文本文件中导入结果,到目前为止,我遇到了障碍。
我已经让程序保存了大约250个十进制值作为单维数组但是我正在尝试让数组本身能够保存在SQL数据库中以便以后可以检索数组和使用小数值构建点的图。
我需要将整个数组作为单个值导入到数据库中,因为实验室项目有几个样本,每个样本都有自己的250个左右的小数点(也将作为数组存储)
感谢您的帮助。
编辑:感谢您的快速回复,但问题在于它不仅仅来自仅有1次测试的样本。每个样本本身都进行相同的测试,不同的分贝水平超过15次。每个测试都有自己的250个结果,我们有很多标本。
此外,样本已经分配了一个唯一的ID,它将被存储为String而不是Int。我打算做的是在每个样本的DB中有一个单独的表,并且每行包含测试分贝级别的信息并存储序列化的数组...
我认为这样可行,因为我们不需要直接从数据库访问数据中的各个点;我只是使用数据库来存储数据内存,因为它有很多。我将查询数据库中的数组和其他信息,然后使用zedgraph绘制数组中的点并同时比较多个样本。
答案 0 :(得分:18)
简短的回答绝对不是。这是两种完全不同的数据结构。有一些解决方法,比如将它放在blob或逗号分隔文本列中。但是,我真的很讨厌那些。它不允许您在SQL Server级别进行数学运算。
IMO,最好的选择包括在表格中有多个列。添加标识符,以便知道数据点属于哪个数组。
例如:
AutoId Specimen Measurement
1 A 42
2 A 45.001
3 B 47.92
然后,为了得到你的结果:
select
measurement
from
mytable
where
specimen = 'A'
order by
autoid asc
编辑:您计划为每个样本单独制作250行表吗?这绝对是矫枉过正的。只需使用一个表,将样本标识符作为列(如图所示),并索引该列。 SQL Server可以很好地处理数百万行。数据库真的很擅长。为什么不发挥自己的优势而不是尝试重新创建C#数据结构?
答案 1 :(得分:3)
我需要导入整个数组 作为单个值进入数据库 虽然因为实验室项目有 几个标本各有自己的 一套250左右的小数点(其中 也将存储为数组)
如果您使用an old shoe or a glass bottle?
,那么你正试图敲钉子这里的答案不是“将数组序列化为XML并将其存储在记录中”。您真的想要争取正确的数据库设计,在您的情况下,最简单的设计是:
Specimens
---------
specimenID (pk int not null)
SpecimenData
------------
dataID (pk int not null
specimenID (fk int not null, points to Specimens table)
awesomeValue (decimal not null)
查询数据非常简单:
SELECT * FROM SpecimenData其中,samplesID = @specimenID
答案 2 :(得分:1)
只要您不访问查询中的各个值,就可以序列化数组并将其作为blob存储在数据库中。
答案 3 :(得分:1)
据推测,您可以将C#中的十进制数组序列化为字节数组,并将其保存在表的二进制字段中。您的表将有两个字段:SpecimenID,DecimalArrayBytes
或者,您可以拥有多对多类型的表,而不是将数组存储为一个部分,具有字段:SpecimenID,DecimalValue,并使用SQL,如
SELECT DecimalValue FROM Table WHERE SpecimenID = X
答案 4 :(得分:0)
您可以序列化数组并将其存储为xml / binary / json的单个块。以下是将其序列化为xml的示例。
public static string Serialize<T>(T obj)
{
StringBuilder sb = new StringBuilder();
DataContractSerializer ser = new DataContractSerializer(typeof(T));
ser.WriteObject(XmlWriter.Create(sb), obj);
return sb.ToString();
}
答案 5 :(得分:0)
你想要两张桌子。一个存储索引,另一个存储十进制值。像这样:
create table arrayKey (
arrayId int identity(1,1) not null
)
create table arrayValue (
arrayID int not null,
sequence int identity(1,1) not null,
storedDecimal decimal(12,2) not null
)
插入arrayKey以获取要使用的ID。所有十进制值都将使用要存储的ID和十进制值存储到arrayValue中。一次插入一个。
当您检索它们时,您可以通过arrayID对它们进行分组,以便它们一起出现。如果您需要按照存储它们的相同顺序检索它们,请按顺序排序。
答案 6 :(得分:0)
虽然任何给定的例子可能都是不切实际的,但通过编程,你可以将任何形状的钉子设计成任何形状的孔。
您可以将数据序列化为varbinary中的存储,XML-ize存储为SQL Server XML类型等。
选择一条路线进行分析并仔细考虑。您也可以为SQL创建自定义CLR库,因此虚拟天空是限制。