2012-03-21 2 views
0

У меня есть vb .net ArrayList, который я хотел бы сохранить в одном поле в моей базе данных Ms SQL 2008. Можно ли включить его и вернуть его как ArrayList?Сохранение .Net ArrayList в базе данных

Я предполагаю, что мне нужно сломать массив каким-то образом и сохранить его как строку, а затем перестроить его при чтении, поскольку я не вижу каких-либо типов данных для sql, которые предназначены для массивов. Для меня это облом!

Может ли кто-нибудь предложить лучший способ сделать это?

Большое спасибо.

Редактировать - ArrayList хранит набор идентификаторов цитат. Нет предела тому, насколько он большой, поэтому он может содержать 1 или 1001 разных идентификаторов

+0

Что в этом ArrayList? – Aliostad

+0

@Aliostad Я отредактировал вопрос. Он содержит набор идентификаторов цитат –

ответ

1

Это, вероятно, является частью отношений «один ко многим». Скажем, например, ваш ArrayList хранит строки, а затем создает отдельную таблицу, в которой одно из полей этого строкового значения. Вы можете отправить ArrayList как пары в класс DALC и петли через нее, добавив одну записи за один раз к БД с помощью вызова хранимой proceedure и т.д.

0

Вы можете использовать сериалайзер такие, как

var serializer = new XmlSerializer(typeof(ArrayList)); 
var buffer = new StringBuilder(); 
using(var tw = new XmlTextWriter(new StringWriter(buffer)){ 
    serializer.serialize(tw, myArrayList); 
} 
var xml = buffer.ToString(); 

нО есть несколько предупреждений:

  • Если у вас есть коллекция, это часто является признаком вы должны сделать много-к-одному столу, но я предполагаю, что вы знаете, что вы делаете, и не нужно что таблица
  • Когда instantiat XmlSerializer, следите за утечками памяти. Он не может применяться в вашем случае, потому что вы используете встроенный тип, но это что-то, чтобы быть в курсе: http://blogs.msdn.com/b/tess/archive/2010/05/05/net-memory-leak-xslcompiledtransform-and-leaked-dynamic-assemblies.aspx
0
Dim no As Integer() = {11, 22, 33, 44} 
     Dim MS As New System.IO.MemoryStream 
     Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 
     bin.Serialize(MS, no) 
     Dim bytes(MS.Length - 1) As Byte 
     MS.Position = 0 
     MS.Read(bytes, 0, bytes.Length) 
     .... 
     ... 
     cmd.ComandText="insert into TableName values (@data)" 
     cmd.Parameters.Add("@data", SqlDbType.Image, bytes.Length).Value = bytes 

Источник: http://www.daniweb.com/software-development/vbnet/threads/253410/save-array-to-database