Я работаю над приложением для лабораторного проекта, и я делаю его на С#. Он должен импортировать результаты из текстового файла, который экспортируется из приложения, которое мы используем для запуска тестов, и до сих пор я попал в дорожный блок.
У меня есть программа для сохранения около 250 десятичных значений в виде одномерного массива, но затем я пытаюсь получить сам массив для сохранения в базе данных SQL, чтобы впоследствии получить массив и используйте десятичные значения для построения графика точек.
Мне нужно, чтобы весь массив был импортирован в базу данных как одно значение, хотя из-за того, что в проекте лаборатории есть несколько экземпляров, каждый из которых имеет собственный набор из 250 или около того десятичных точек (которые также будут храниться в виде массивов)
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ: Спасибо за быстрые ответы, ребята, но проблема в том, что его результаты не только от образца с только 1 испытанием. Каждый экземпляр сам по себе имеет те же тесты, что и у них с разным уровнем децибел в 15 раз. Каждый тест имеет свои собственные 250 результатов, и у нас много образцов.
Кроме того, у экземпляров уже есть уникальный идентификатор, назначенный им, и он будет храниться как строка, а не Int. То, что я планирую сделать, это иметь отдельную таблицу в БД для каждого экземпляра, и каждая строка содержит информацию о уровне децибела теста и хранить сериализованный массив...
Я думаю, что это сработает, потому что нам не нужно будет получать доступ к отдельным точкам данных прямо из базы данных; Я просто использую базу данных для хранения данных из памяти, так как их так много. Я собираюсь запросить базу данных для массива и другой информации, а затем использовать zedgraph для построения точек в массиве и одновременного сравнения нескольких экземпляров.
Короткий ответ абсолютно нет. Это две совершенно разные структуры данных. Есть работа вокруг, например, поместить его в блокнот или запятую, разделяя текстовую колонку. Но я действительно их ненавижу. Это не позволяет выполнять математику на уровне 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 может обрабатывать миллионы и миллионы строк. Базы данных действительно хороши в этом. Почему бы не играть в свои сильные стороны, а не пытаться воссоздать структуры данных С#?
Мне нужен весь массив, который нужно импортировать в базу данных как одно значение хотя из-за того, что в несколько экземпляров, каждый со своими набор из 250 или около того десятичных точек (которые также будут храниться в виде массивов)
Итак, вы пытаетесь набить гвоздь, если вы используете старую обувь или стеклянную бутылку?
Ответ здесь не "сериализует массив в 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, где sampleID = @specimenID
Предположительно, вы можете сериализовать десятичный массив в С# в байтовый массив и сохранить его в двоичном поле таблицы. Ваша таблица будет иметь два поля: SpecimenID, DecimalArrayBytes
В качестве альтернативы вам может быть множество таблиц типов и не хранить массив в одной части, имея поля: SpecimenID, DecimalValue и использовать SQL как
SELECT DecimalValue FROM Table WHERE SpecimenID = X
Пока вы не получаете доступ к отдельным значениям в ваших запросах, вы можете сериализовать массив и сохранить его как blob в базе данных.
Хотя любой данный пример может быть непрактичным, через программирование вы можете создать любую форму привязки в любой форме отверстия.
Вы можете сериализовать свои данные для хранения в varbinary, XML-ize для хранения в формате SQL Server XML и т.д.
Выберите маршрут для анализа и тщательного рассмотрения. Вы можете создавать пользовательские библиотеки CLR для SQL, так что виртуальное небо является пределом.
Вам нужны две таблицы. Один для хранения индекса, другой - для хранения десятичных значений. Что-то вроде этого:
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
)
Вставьте в массивKey, чтобы получить ID для использования. Все десятичные значения будут храниться в arrayValue, используя идентификатор и десятичное значение для хранения. Вставьте их по одному.
Когда вы их извлекаете, вы можете группировать их по идентификатору массива так, чтобы все они выходили вместе. Если вам нужно восстановить их в том же порядке, который вы их сохранили, выполните сортировку по последовательности.
Вы можете сериализовать массив и сохранить его как единый фрагмент 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();
}