ローカルデータベースのファイル保存、読み出し
ローカルデータベースのファイル保存と読み込みについてみてきましょう。具体的に、C#言語を使用して、DataSetをファイルに保存し、保存されたファイルからDataSetを読み込む方法になります
目次
DataSetのファイル保存読み出し
DataSetをファイルに保存
// DataSetをXML形式でファイルに書き込む
bookDataSet.WriteXml("bookData.xml");
保存したファイルからDataSetへの読み込み
// データが重複しないようにクリアしておく
bookDataSet.bookDataTable.Clear();
// xmlスキーマとデータを読み取りDataSetに取り込む
bookDataSet.ReadXml("bookData.xml");
// DataGridViewにセット
bookDataGrid.DataSource = bookDataSet;
// DataGridViewで表示されるデータの対象テーブルをセット
bookDataGrid.DataMember = "bookDataTable";
全体のサンプルコード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BookManager
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
bookDataSet.bookDataTable.AddbookDataTableRow(
"車辞典",
"車太郎",
1000
);
bookDataSet.bookDataTable.AddbookDataTableRow(
"車大百科",
"車次郎",
2000
);
bookDataSet.bookDataTable.AddbookDataTableRow(
"楽しい車",
"車太郎",
3000
);
bookDataSet.bookDataTable.AddbookDataTableRow(
"楽しい飛行機",
"飛行機太郎",
4000
);
DataRow row = bookDataSet.bookDataTable.NewRow();
row["書名"] = "楽しい海水浴";
row["著者"] = "近藤正美";
row["値段"] = 5000;
bookDataSet.Tables["bookDataTable"].Rows.Add(row);
// LINQを使ってデータを抽出
DataRow[] dRows = bookDataSet.bookDataTable.AsEnumerable()
.Where(r => r.Field<string>("書名") == "楽しい海水浴").ToArray();
// データテーブルのコピーを作成
DataTable sortedDataTable = bookDataSet.bookDataTable.Clone();
DataView dataView = bookDataSet.bookDataTable.DefaultView;
dataView.Sort = "著者";
foreach (DataRowView dataRowView in dataView)
{
sortedDataTable.ImportRow(dataRowView.Row);
}
//bookDataSet.bookDataTable[0][0] = "楽しいキャンプ";
//bookDataSet.bookDataTable[0]["著者"] = "木村";
DataRow[] dataRows = bookDataSet.Tables["bookDataTable"]
.Select("著者 = '車太郎'");
DataRow[] dataRows1 = bookDataSet.Tables["bookDataTable"]
.Select("著者 LIKE '車%'");
}
private void AddButtonClicked(object sender, EventArgs e)
{
// DataTableにデータを追加する
bookDataSet.bookDataTable.AddbookDataTableRow(
this.bookName.Text,
this.author.Text,
int.Parse(this.price.Text)
);
//bookDataSet.Tables["bookDataTable"].Rows[0].Delete();
}
private void RemoveButtonClicked(object sender, EventArgs e)
{
// 選択した行のデータを削除する
int row = this.bookDataGrid.CurrentRow.Index;
this.bookDataGrid.Rows.RemoveAt(row);
}
private void SaveButton_Click(object sender, EventArgs e)
{
// DataSetをXML形式でファイルに書き込む
bookDataSet.WriteXml("bookData.xml");
}
private void LoadButton_Click(object sender, EventArgs e)
{
// テーブルをクリア
bookDataSet.bookDataTable.Clear();
// xmlスキーマとデータを読み取りDataSetに取り込む
bookDataSet.ReadXml("bookData.xml");
// DataGridViewで表示されるデータセットの取得
bookDataGrid.DataSource = bookDataSet;
// DataGridViewで表示されるデータの対象テーブルをセット
bookDataGrid.DataMember = "bookDataTable";
}
private void ShowXMLButton_Click(object sender, EventArgs e)
{
// DataGridViewに読み込んだデータ構造の表示
using (var swXML = new StringWriter())
{
bookDataSet.WriteXmlSchema(swXML);
xmlTextBox.Text = swXML.ToString();
}
}
}
参考
xmlスキーマの確認
TextBoxをひとつ作成して、表示させています
// DataGridViewに読み込んだデータ構造の表示
using (var swXML = new StringWriter())
{
bookDataSet.WriteXmlSchema(swXML);
xmlTextBox.Text = swXML.ToString();
}
xmlスキーマのサンプル
<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="BookDataSet" targetNamespace="http://tempuri.org/BookDataSet.xsd" xmlns:mstns="http://tempuri.org/BookDataSet.xsd" xmlns="http://tempuri.org/BookDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="BookDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="bookDataTable">
<xs:complexType>
<xs:sequence>
<xs:element name="書名" type="xs:string" minOccurs="0" />
<xs:element name="著者" type="xs:string" minOccurs="0" />
<xs:element name="値段" type="xs:int" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
xmlファイルのサンプル
保存されたデータのサンプル
<?xml version="1.0" standalone="yes"?>
<BookDataSet xmlns="http://tempuri.org/BookDataSet.xsd">
<bookDataTable>
<書名>車辞典</書名>
<著者>車太郎</著者>
<値段>1000</値段>
</bookDataTable>
<bookDataTable>
<書名>車大百科</書名>
<著者>車次郎</著者>
<値段>2000</値段>
</bookDataTable>
<bookDataTable>
<書名>楽しい車</書名>
<著者>車太郎</著者>
<値段>3000</値段>
</bookDataTable>
<bookDataTable>
<書名>楽しい飛行機</書名>
<著者>飛行機太郎</著者>
<値段>4000</値段>
</bookDataTable>
<bookDataTable>
<書名>楽しい海水浴</書名>
<著者>近藤正美</著者>
<値段>5000</値段>
</bookDataTable>
</BookDataSet>
ディスカッション
コメント一覧
まだ、コメントがありません