「SQL Server Compact デスクトップ用アプリケーションの構築」の版間の差分
ナビゲーションに移動
検索に移動
1行目: | 1行目: | ||
− | ==SQL Server Compact デスクトップ用アプリケーションの構築== | + | ==[[SQL Server Compact デスクトップ用アプリケーションの構築]]== |
[[Database]] | [[SQL Server Compact]] | [[SQL Server]] | [[C Sharp]] | | [[Database]] | [[SQL Server Compact]] | [[SQL Server]] | [[C Sharp]] | | ||
*[http://msdn.microsoft.com/ja-jp/library/bb510741.aspx Transact-SQL リファレンス] | *[http://msdn.microsoft.com/ja-jp/library/bb510741.aspx Transact-SQL リファレンス] | ||
===データ参照サンプルの作成=== | ===データ参照サンプルの作成=== | ||
− | ==== | + | ====[[Windows]]アプリケーションプロジェクトの作成==== |
[[File:1133_sqlsvrce01.jpg]] | [[File:1133_sqlsvrce01.jpg]] | ||
====参照設定==== | ====参照設定==== | ||
*参照の追加ダイアログから、参照タブを選択 | *参照の追加ダイアログから、参照タブを選択 | ||
− | *%Program Files%\Microsoft SQL Server Compact Edition\v3.5\DeskTop から System.Data.SqlServerCe.dll を選択 | + | *%Program Files%\Microsoft [[SQL Server Compact]] Edition\v3.5\DeskTop から System.Data.SqlServerCe.dll を選択 |
[[File:1135_sqlsvrce02.jpg]] | [[File:1135_sqlsvrce02.jpg]] | ||
====サーバーエクスプローラーにサンプルDBを接続==== | ====サーバーエクスプローラーにサンプルDBを接続==== | ||
*サーバーエクスプローラー - データ接続 - 接続の追加 | *サーバーエクスプローラー - データ接続 - 接続の追加 | ||
− | *サンプルDB(Northwind.sdf)を%ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5\Samples から 適当なディレクトリにコピーしておく | + | *サンプルDB(Northwind.sdf)を%ProgramFiles%\Microsoft [[SQL Server Compact]] Edition\v3.5\Samples から 適当なディレクトリにコピーしておく |
− | <blockquote>Windows Vista、Windows 7 を使用している場合、管理者以外のモードで Visual Studio を実行すると、Northwind.sdf に接続できない。Northwind.sdf に接続するには、データベース ファイルを Windows ディレクトリ、Program Files ディレクトリ、またはシステム ドライブに配置しないようにする。</blockquote> | + | <blockquote>Windows Vista、Windows 7 を使用している場合、管理者以外のモードで [[Visual Studio]] を実行すると、Northwind.sdf に接続できない。Northwind.sdf に接続するには、データベース ファイルを Windows ディレクトリ、Program Files ディレクトリ、またはシステム ドライブに配置しないようにする。</blockquote> |
[[File:1136_sqlsvrce03.jpg]] | [[File:1136_sqlsvrce03.jpg]] | ||
33行目: | 33行目: | ||
using System.Linq; | using System.Linq; | ||
using System.Text; | using System.Text; | ||
− | using System.Windows.Forms; | + | using System.[[Windows]].Forms; |
using System.Data.SqlServerCe; | using System.Data.SqlServerCe; | ||
− | namespace | + | namespace [[SQL]]ServerCeTest |
{ | { | ||
public partial class Form1 : Form | public partial class Form1 : Form | ||
53行目: | 53行目: | ||
SqlCeCommand cmd = conn.CreateCommand(); | SqlCeCommand cmd = conn.CreateCommand(); | ||
cmd.CommandText = "SELECT [Customer ID], [Company Name] FROM Customers"; | cmd.CommandText = "SELECT [Customer ID], [Company Name] FROM Customers"; | ||
− | + | SqlCeData[[R]]eader reader = cmd.Execute[[R]]eader(); | |
try | try | ||
{ | { | ||
− | while (reader. | + | while (reader.[[R]]ead()) |
{ | { | ||
String customer_id = reader.GetString(0); | String customer_id = reader.GetString(0); | ||
87行目: | 87行目: | ||
string conn_str = @"Data Source=" + db_file; | string conn_str = @"Data Source=" + db_file; | ||
SqlCeEngine engine = new SqlCeEngine(conn_str); | SqlCeEngine engine = new SqlCeEngine(conn_str); | ||
− | engine. | + | engine.Create[[Database]](); |
engine.Dispose(); | engine.Dispose(); | ||
MessageBox.Show("作成しました。"); | MessageBox.Show("作成しました。"); | ||
95行目: | 95行目: | ||
SqlCeEngine engine = new SqlCeEngine(); | SqlCeEngine engine = new SqlCeEngine(); | ||
engine .LocalConnectionString= "Data Source='Test.sdf'; LCID=1033;" + | engine .LocalConnectionString= "Data Source='Test.sdf'; LCID=1033;" + | ||
− | "Password='s$;2'!dS64'; Encrypt = | + | "Password='s$;2'!dS64'; Encrypt = T[[R]]UE;"; |
SqlCeEngine engine = new SqlCeEngine(); | SqlCeEngine engine = new SqlCeEngine(); | ||
107行目: | 107行目: | ||
conn.Open(); | conn.Open(); | ||
SqlCeCommand cmd = conn.CreateCommand(); | SqlCeCommand cmd = conn.CreateCommand(); | ||
− | cmd.CommandText = @" | + | cmd.CommandText = @"C[[R]]EATE TABLE MyCustomers (CustID int IDENTITY (100,1) P[[R]]IMA[[R]]Y KEY, CompanyName nvarchar (50))"; |
cmd.ExecuteNonQuery(); | cmd.ExecuteNonQuery(); | ||
} | } | ||
120行目: | 120行目: | ||
foreach (SqlCeError err in sqle.Errors) | foreach (SqlCeError err in sqle.Errors) | ||
{ | { | ||
− | buf.Append("\n Error Code : " + err. | + | buf.Append("\n Error Code : " + err.H[[R]]esult.ToString("X")); |
buf.Append("\n Message : " + err.Message); | buf.Append("\n Message : " + err.Message); | ||
} | } | ||
137行目: | 137行目: | ||
foreach (string company in companies) | foreach (string company in companies) | ||
{ | { | ||
− | cmd.CommandText = @" | + | cmd.CommandText = @"INSE[[R]]T INTO MyCustomers(CompanyName) VALUES( '" + company + "')"; |
cmd.ExecuteNonQuery(); | cmd.ExecuteNonQuery(); | ||
} | } | ||
151行目: | 151行目: | ||
foreach (SqlCeError err in sqle.Errors) | foreach (SqlCeError err in sqle.Errors) | ||
{ | { | ||
− | buf.Append("\n Error Code : " + err. | + | buf.Append("\n Error Code : " + err.H[[R]]esult.ToString("X")); |
buf.Append("\n Message : " + err.Message); | buf.Append("\n Message : " + err.Message); | ||
} | } | ||
161行目: | 161行目: | ||
*http://msdn.microsoft.com/ja-jp/library/bb399572.aspx | *http://msdn.microsoft.com/ja-jp/library/bb399572.aspx | ||
− | ADO.Net Entity Framework | + | [[ADO.Net Entity Framework]] |
− | *データ指向ソフトウェア アプリケーションの開発をサポートする ADO.NET の一連のテクノロジ | + | *データ指向ソフトウェア アプリケーションの開発をサポートする ADO[[.NET]] の一連のテクノロジ |
*オブジェクトやプロパティの形式のデータを操作することができ、そのデータが格納されている基になるデータベースのテーブルや列のことを気にする必要がなくなる。 | *オブジェクトやプロパティの形式のデータを操作することができ、そのデータが格納されている基になるデータベースのテーブルや列のことを気にする必要がなくなる。 | ||
*高度な抽象化レベルでデータを操作できるため、特定のデータ ストレージ エンジンやリレーショナル スキーマに依存しないコードを作成できる。 | *高度な抽象化レベルでデータを操作できるため、特定のデータ ストレージ エンジンやリレーショナル スキーマに依存しないコードを作成できる。 | ||
− | *直接リレーショナル ストレージ | + | *直接リレーショナル ストレージ スキーマに対してプログラミングを行うのではなく、アプリケーションの[[概念]]モデルに対してプログラミングを行うことによってデータ アクセス アプリケーションを作成できる。 |
====Entity Framework インストール==== | ====Entity Framework インストール==== | ||
− | + | [[.NET]] Framework 3.5 Service Pack 1 (SP1) 以降の [[.NET]] Framework のコンポーネント | |
− | *Visual Studio における Entity Framework に対する Entity Data Model Designer のサポートは、Entity Framework Tools で提供 | + | *[[Visual Studio]] における Entity Framework に対する Entity Data Model Designer のサポートは、Entity Framework Tools で提供 |
− | *Entity Data Model | + | *Entity Data Model Designerは、[[Visual Studio]] 2008 Service Pack 1以降の [[Visual Studio]] のコンポーネントで、エンティティ データ モデルの作成や編集に使用されるビジュアル ツール |
− | ====System.Data. | + | ====System.Data.[[SQL]]ServerCe.Entity.dll==== |
− | *System.Data.SQLServerCe.Entity.dll アセンブリは、ADO.NET マネージ データ プロバイダの System.Data.SqlServerCE.dll によって内部で使用され、エンティティ データ モデル (EDM) に記述されているデータへのアクセスをサポート | + | *System.Data.SQLServerCe.Entity.dll アセンブリは、ADO[[.NET]] マネージ データ プロバイダの System.Data.SqlServerCE.dll によって内部で使用され、エンティティ データ モデル (EDM) に記述されているデータへのアクセスをサポート |
− | * %ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5 フォルダにインストールされる | + | * %ProgramFiles%\Microsoft [[SQL Server Compact]] Edition\v3.5 フォルダにインストールされる |
====サンプルデータベース(Northwind)からの作成例==== | ====サンプルデータベース(Northwind)からの作成例==== | ||
=====プロジェクト - 新しい項目の追加===== | =====プロジェクト - 新しい項目の追加===== | ||
− | *テンプレートペインで、ADO.NET エンティティ データ モデル を選択 | + | *テンプレートペインで、ADO[[.NET]] エンティティ データ モデル を選択 |
*ファイル名を Northwind.edmx とする | *ファイル名を Northwind.edmx とする | ||
[[File:1141_sqlsvrce08.jpg]] | [[File:1141_sqlsvrce08.jpg]] | ||
188行目: | 188行目: | ||
=====Northwind.edmxが作成された===== | =====Northwind.edmxが作成された===== | ||
[[File:1144_sqlsvrce12.jpg]] | [[File:1144_sqlsvrce12.jpg]] | ||
− | =====System.Data.Entity.dll、System. | + | =====System.Data.Entity.dll、System.[[R]]untime.Serialization.dll、System.Security.dll の各アセンブリに参照===== |
− | %ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5 | + | %ProgramFiles%\Microsoft [[SQL Server Compact]] Edition\v3.5 |
*System.Data.Entity.dll | *System.Data.Entity.dll | ||
[[File:1145_sqlsvrce13.jpg]] | [[File:1145_sqlsvrce13.jpg]] | ||
− | *System. | + | *System.[[R]]untime.Serialization.dll、System.Security.dll |
[[File:1146_sqlsvrce14.jpg]] | [[File:1146_sqlsvrce14.jpg]] | ||
=====App.Config===== | =====App.Config===== | ||
201行目: | 201行目: | ||
<configuration> | <configuration> | ||
<connectionStrings> | <connectionStrings> | ||
− | <add name="NorthwindEntities" connectionString="metadata=res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl; | + | <add name="NorthwindEntities" connectionString="metadata=res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl;pro[[vi]]der=System.Data.SqlServerCe.3.5;pro[[vi]]der connection string="Data Source=C:\work\Northwind.sdf"" pro[[vi]]derName="System.Data.EntityClient" /> |
</connectionStrings> | </connectionStrings> | ||
</configuration> | </configuration> | ||
212行目: | 212行目: | ||
EntityCommand cmd = conn.CreateCommand(); | EntityCommand cmd = conn.CreateCommand(); | ||
cmd.CommandText = @"Select Cust.Customer_Id as Id, Cust.Company_Name as Name from NorthwindEntities.Customers as Cust order by Cust.Customer_Id"; | cmd.CommandText = @"Select Cust.Customer_Id as Id, Cust.Company_Name as Name from NorthwindEntities.Customers as Cust order by Cust.Customer_Id"; | ||
− | EntityDataReader reader = cmd.ExecuteReader(CommandBehavior. | + | EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.Sequential[[Access]]); |
− | while (reader. | + | while (reader.[[R]]ead()) |
{ | { | ||
for (int i = 0; i < reader.FieldCount; i++) | for (int i = 0; i < reader.FieldCount; i++) |
2020年2月16日 (日) 04:32時点における最新版
目次
SQL Server Compact デスクトップ用アプリケーションの構築
Database | SQL Server Compact | SQL Server | C Sharp |
データ参照サンプルの作成
Windowsアプリケーションプロジェクトの作成
参照設定
- 参照の追加ダイアログから、参照タブを選択
- %Program Files%\Microsoft SQL Server Compact Edition\v3.5\DeskTop から System.Data.SqlServerCe.dll を選択
サーバーエクスプローラーにサンプルDBを接続
- サーバーエクスプローラー - データ接続 - 接続の追加
- サンプルDB(Northwind.sdf)を%ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5\Samples から 適当なディレクトリにコピーしておく
<blockquote>Windows Vista、Windows 7 を使用している場合、管理者以外のモードで Visual Studio を実行すると、Northwind.sdf に接続できない。Northwind.sdf に接続するには、データベース ファイルを Windows ディレクトリ、Program Files ディレクトリ、またはシステム ドライブに配置しないようにする。</blockquote>
- 登録された
プログラミング(SELECT例)
- クラスライブラリリファレンス http://msdn.microsoft.com/ja-jp/library/system.data.sqlserverce.aspx
- 複数行テキストボックスと、ボタンを配置
- ボタン押下で、テキストボックスにテーブルの値をセットさせる
Form1.cs にコーディング
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlServerCe; namespace SQLServerCeTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string conn_str = @"Data Source=C:\work\Northwind.sdf"; SqlCeConnection conn = new SqlCeConnection(conn_str); conn.Open(); SqlCeCommand cmd = conn.CreateCommand(); cmd.CommandText = "SELECT [Customer ID], [Company Name] FROM Customers"; SqlCeDataReader reader = cmd.ExecuteReader(); try { while (reader.Read()) { String customer_id = reader.GetString(0); String company_name = reader.GetString(1); textBox1.AppendText(customer_id + "\t" + company_name + "\n"); } } finally { reader.Close(); conn.Close(); } } } }
実行
データベースの作成
データ型
Engineオブジェクトを使用してデータベースを作成
例
string db_file = @"c:\work\test.sdf"; if (File.Exists(db_file)) { MessageBox.Show("すでに存在しています。"); } else { string conn_str = @"Data Source=" + db_file; SqlCeEngine engine = new SqlCeEngine(conn_str); engine.CreateDatabase(); engine.Dispose(); MessageBox.Show("作成しました。"); }
- パスワード、暗号化等のオプションを指定してデータベースを作成
SqlCeEngine engine = new SqlCeEngine(); engine .LocalConnectionString= "Data Source='Test.sdf'; LCID=1033;" + "Password='s$;2'!dS64'; Encrypt = TRUE;"; SqlCeEngine engine = new SqlCeEngine();
テーブルの作成とエラー処理
例
try { string conn_str = @"Data Source=c:\work\test.sdf"; SqlCeConnection conn = new SqlCeConnection(conn_str); conn.Open(); SqlCeCommand cmd = conn.CreateCommand(); cmd.CommandText = @"CREATE TABLE MyCustomers (CustID int IDENTITY (100,1) PRIMARY KEY, CompanyName nvarchar (50))"; cmd.ExecuteNonQuery(); } catch (SqlCeException sqle) { Exception inner = sqle.InnerException; if (inner != null) { MessageBox.Show(inner.ToString()); } StringBuilder buf = new StringBuilder(); foreach (SqlCeError err in sqle.Errors) { buf.Append("\n Error Code : " + err.HResult.ToString("X")); buf.Append("\n Message : " + err.Message); } MessageBox.Show(buf.ToString()); }
データの挿入
try { string conn_str = @"Data Source=c:\work\test.sdf"; SqlCeConnection conn = new SqlCeConnection(conn_str); conn.Open(); SqlCeCommand cmd = conn.CreateCommand(); string[] companies = { "CompanyAAA", "CompanyBBB", "CompanyCCC", "CompanyDDD" }; foreach (string company in companies) { cmd.CommandText = @"INSERT INTO MyCustomers(CompanyName) VALUES( '" + company + "')"; cmd.ExecuteNonQuery(); } } catch (SqlCeException sqle) { Exception inner = sqle.InnerException; if (inner != null) { MessageBox.Show(inner.ToString()); } StringBuilder buf = new StringBuilder(); foreach (SqlCeError err in sqle.Errors) { buf.Append("\n Error Code : " + err.HResult.ToString("X")); buf.Append("\n Message : " + err.Message); } MessageBox.Show(buf.ToString()); }
Entity Framework
- http://msdn.microsoft.com/ja-jp/library/cc835494.aspx
- http://msdn.microsoft.com/ja-jp/library/bb399572.aspx
- データ指向ソフトウェア アプリケーションの開発をサポートする ADO.NET の一連のテクノロジ
- オブジェクトやプロパティの形式のデータを操作することができ、そのデータが格納されている基になるデータベースのテーブルや列のことを気にする必要がなくなる。
- 高度な抽象化レベルでデータを操作できるため、特定のデータ ストレージ エンジンやリレーショナル スキーマに依存しないコードを作成できる。
- 直接リレーショナル ストレージ スキーマに対してプログラミングを行うのではなく、アプリケーションの概念モデルに対してプログラミングを行うことによってデータ アクセス アプリケーションを作成できる。
Entity Framework インストール
.NET Framework 3.5 Service Pack 1 (SP1) 以降の .NET Framework のコンポーネント
- Visual Studio における Entity Framework に対する Entity Data Model Designer のサポートは、Entity Framework Tools で提供
- Entity Data Model Designerは、Visual Studio 2008 Service Pack 1以降の Visual Studio のコンポーネントで、エンティティ データ モデルの作成や編集に使用されるビジュアル ツール
System.Data.SQLServerCe.Entity.dll
- System.Data.SQLServerCe.Entity.dll アセンブリは、ADO.NET マネージ データ プロバイダの System.Data.SqlServerCE.dll によって内部で使用され、エンティティ データ モデル (EDM) に記述されているデータへのアクセスをサポート
- %ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5 フォルダにインストールされる
サンプルデータベース(Northwind)からの作成例
プロジェクト - 新しい項目の追加
- テンプレートペインで、ADO.NET エンティティ データ モデル を選択
- ファイル名を Northwind.edmx とする
サンプルデータベースから作成
設定を確認して次へ
テーブルを選択
Northwind.edmxが作成された
System.Data.Entity.dll、System.Runtime.Serialization.dll、System.Security.dll の各アセンブリに参照
%ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5
- System.Data.Entity.dll
- System.Runtime.Serialization.dll、System.Security.dll
App.Config
- App.Configに設定が反映されていることを確認
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="NorthwindEntities" connectionString="metadata=res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl;provider=System.Data.SqlServerCe.3.5;provider connection string="Data Source=C:\work\Northwind.sdf"" providerName="System.Data.EntityClient" /> </connectionStrings> </configuration>
実装例(シンプルなクエリ、LINQ、オブジェクトクエリ)
シンプルなクエリ
using (EntityConnection conn = new EntityConnection("Name = NorthwindEntities")) { conn.Open(); EntityCommand cmd = conn.CreateCommand(); cmd.CommandText = @"Select Cust.Customer_Id as Id, Cust.Company_Name as Name from NorthwindEntities.Customers as Cust order by Cust.Customer_Id"; EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess); while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { textBox1.AppendText(reader[i].ToString() + "\t"); } textBox1.AppendText("\n"); } }
LINQを利用したクエリ
using(NorthwindEntities entities = new NorthwindEntities()){ IQueryable<string> customers = from c in entities.Customers select c.Company_Name; foreach (string c in customers) { textBox1.AppendText(c + "\n"); } }
オブジェクトクエリ
using (EntityConnection conn = new EntityConnection("Name = NorthwindEntities")) { conn.Open(); using (NorthwindEntities entities = new NorthwindEntities(conn)) { foreach (Customers c in entities.Customers) { textBox1.AppendText(c.Customer_ID + "\t" + c.Company_Name + "\n"); } } }
実行例
モデルの更新
モデル ブラウザ ウィンドウで .edmx ファイルを右クリックし、データベースからモデルを更新
オブジェクトの追加、変更、削除
http://msdn.microsoft.com/ja-jp/library/bb386870.aspx http://msdn.microsoft.com/ja-jp/library/bb386871.aspx
© 2006 矢木浩人