| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「SQL Server Compact デスクトップ用アプリケーションの構築」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の1版が非表示)
1行目: 1行目:
==SQL Server Compact デスクトップ用アプリケーションの構築==
+
==[[SQL Server Compact デスクトップ用アプリケーションの構築]]==
[[Database]][[SQL Server Compact]][[SQL Server]][[C#]]
+
[[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アプリケーションプロジェクトの作成====
+
====[[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 SQLServerCeTest
+
  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";
             SqlCeDataReader reader = cmd.ExecuteReader();
+
             SqlCeData[[R]]eader reader = cmd.Execute[[R]]eader();
 
   
 
   
 
             try
 
             try
 
             {
 
             {
                 while (reader.Read())
+
                 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.CreateDatabase();
+
     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 = TRUE;";
+
   "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 = @"CREATE TABLE MyCustomers (CustID int IDENTITY (100,1) PRIMARY KEY, CompanyName nvarchar (50))";
+
     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.HResult.ToString("X"));
+
         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 = @"INSERT INTO MyCustomers(CompanyName) VALUES( '" + company + "')";
+
         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.HResult.ToString("X"));
+
         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 のコンポーネント
+
[[.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 Designerは、Visual Studio 2008 Service Pack 1以降の Visual Studio のコンポーネントで、エンティティ データ モデルの作成や編集に使用されるビジュアル ツール
+
*Entity Data Model Designerは、[[Visual Studio]] 2008 Service Pack 1以降の [[Visual Studio]] のコンポーネントで、エンティティ データ モデルの作成や編集に使用されるビジュアル ツール
====System.Data.SQLServerCe.Entity.dll====
+
====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.Runtime.Serialization.dll、System.Security.dll の各アセンブリに参照=====
+
=====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.Runtime.Serialization.dll、System.Security.dll
+
*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;provider=System.Data.SqlServerCe.3.5;provider connection string="Data Source=C:\work\Northwind.sdf"" providerName="System.Data.EntityClient" />
+
     <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.SequentialAccess);
+
     EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.Sequential[[Access]]);
     while (reader.Read())
+
     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アプリケーションプロジェクトの作成

1133 sqlsvrce01.jpg

参照設定

  • 参照の追加ダイアログから、参照タブを選択
  • %Program Files%\Microsoft SQL Server Compact Edition\v3.5\DeskTop から System.Data.SqlServerCe.dll を選択

1135 sqlsvrce02.jpg

サーバーエクスプローラーにサンプル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>

1136 sqlsvrce03.jpg

  • 登録された

1137 sqlsvrce04.jpg

プログラミング(SELECT例)

1138 sqlsvrce05.jpg

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();
            }
        }
    }
}

実行

1139 sqlsvrce06.jpg

データベースの作成

データ型

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());
}

1140 sqlsvrce07.jpg

Entity Framework

ADO.Net Entity Framework

  • データ指向ソフトウェア アプリケーションの開発をサポートする 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 とする

1141 sqlsvrce08.jpg

サンプルデータベースから作成

1142 sqlsvrce09.jpg

設定を確認して次へ

1134 sqlsvrce010.jpg

テーブルを選択

1143 sqlsvrce11.jpg

Northwind.edmxが作成された

1144 sqlsvrce12.jpg

System.Data.Entity.dll、System.Runtime.Serialization.dll、System.Security.dll の各アセンブリに参照

%ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5

  • System.Data.Entity.dll

1145 sqlsvrce13.jpg

  • System.Runtime.Serialization.dll、System.Security.dll

1146 sqlsvrce14.jpg

App.Config
  • App.Configに設定が反映されていることを確認

1149 sqlsvrce17.jpg

<?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");
        }
    }
}
実行例

1147 sqlsvrce15.jpg 1148 sqlsvrce16.jpg

モデルの更新

モデル ブラウザ ウィンドウで .edmx ファイルを右クリックし、データベースからモデルを更新

1132 entity framework01.jpg

オブジェクトの追加、変更、削除

http://msdn.microsoft.com/ja-jp/library/bb386870.aspx http://msdn.microsoft.com/ja-jp/library/bb386871.aspx