2014-05-02 5 views
1
Is it possible to store the data in a data table in the hard disk instead of 

the memory? По умолчанию, когда таблица данных заполняется, таблица (и данных) останется в памяти. Можно ли сохранить эти данные в другом носителе помимо памяти? Все оставалось бы таким же, но вместо заполнения таблицы данных, сохранив ее в памяти, я был бы , храня его где-то на жестком диске.Хранение данных на жестких дисках

ответ

0

Вы можете записать его на диск и сохранить его в файле или базе данных, но он должен быть загружен в память для вашей программы, чтобы иметь возможность взаимодействовать с ней.

+0

Я. @TGH логически ты прав – Aman

1

Объект DataTable класс имеет метод, называемый WriteXml со многими перегрузками, который помогает писать его содержимое на диск

В своей простейшей форме вы могли бы написать эту строку

myDataTable.WriteXml(somePathAndFileNameXML); 

, но, возможно, лучше методы те, которые позволяют записать также данные схемы и таблицы данных

myDataTable.WriteXml.WriteXml(somePathAndFileNameXML, XmlWriteMode.WriteSchema); 

обратное также возможно с ReadXml метод

4

System.Data.DataTable реализует ISerializable, так что это не является большой проблемой : следующий пример использует бинарную сериализацию

с использованием System.Runtime.Serialization.Formatters.Binary;

[...]

//Create DataTable and Serialize 
private void button1_Click(object sender, System.EventArgs e) 
{ 
DataTable dt = new DataTable(); 
dt.Columns.Add("uid"); 
dt.Columns.Add("test"); 
for (int i = 0; i < 10; i++) 
{ 
DataRow dr = dt.NewRow(); 
dr[0] = i; 
dr[1] = string.Format("test{0}", i); 
dt.Rows.Add(dr); 
} 

FileStream fs = new FileStream(@"C:\test.bin", FileMode.Create); 
BinaryFormatter bf = new BinaryFormatter(); 
bf.Serialize(fs, dt); 
fs.Close(); 
} 
//Deserialize DataTable from File 
private void button2_Click(object sender, System.EventArgs e) 
{ 
FileStream fs = new FileStream(@"C:\test.bin", FileMode.Open); 
BinaryFormatter bf = new BinaryFormatter(); 
DataTable dt = (DataTable) bf.Deserialize(fs); 
fs.Close(); 
foreach (DataRow dr in dt.Rows) 
{ 
Debug.WriteLine(dr[0].ToString()); 
} 
} 
Смежные вопросы