fc2ブログ

t100のプログラミング脱出作戦

自分のプログラミング脳をプログラムにして、いつかプログラミングから脱出してやるぞっ!とか夢見ながら、日々プログラム作っていく 百野 貴博 の日記です!今は、屋号『百蔵。』として、Silverlight・WPFを追跡中です! (2007/09/30)
SQL Server CE を使ってみました。
SQL Server 2005 Compact Edition を使ってみました。

CE版の魅力は何といっても、インストールしないでもアプリケーションに組み込んで使えるところっ。
なんとアプリケーションにDLLを含めるだけで使えてしまうのです。(ということらしいです)
これが出来れば、ユーザーのインストールコストを上げずに、アプリにSQL Serverの機能を持たせられるぞ。
やったー。

というわけで、以下が手順です。
今回のは以下のチュートリアルを参考に、C# Express 2008を使いました。

Application Deployment with Shared and Private Deployments (C#)


●まずは、SQL Server 2005 Compact Edition をインストール

ここからダウンロード

実行環境はインストールいらずでも、開発環境はとりあえずインストールしないとダメぽ。
※DLLさえコピーしちゃえば、アンインストールしても大丈夫でしたっ。

●プロジェクトを作って必要なDLLをコピー

とりあえず、コンソールにSQLの実行結果を出力するプロジェクトを作ってみます。
その後、必要なDLLをプロジェクトの直下のフォルダにコピーします。
コピーするのは、以下のファイル。

・C:\Program Files\Microsoft SQL Server Compact Edition\v3.5 にある以下のファイル。
sqlceca35.dll
sqlcecompact35.dll
sqlceer35JA.dll
sqlceme35.dll
sqlceoledb35.dll
sqlceqp35.dll
sqlcese35.dll


・C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Device 以下にもあります。

System.Data.SqlServerCe.dll



これで必要なDLLはそろた。
あと、サンプルデータベースもコピー。

・C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Samples 以下にあります。

Northwind.sdf



●参照設定は、System.Data.SqlServerCe.dllに。

DLLは山ほどコピーしたのに、参照設定はSystem.Data.SqlServerCe.dllだけ。
なんで?

あと、System.Data.SqlServerCe.dll の"Copy Local"をTrueに。
これで、異なるバージョンのSQL Server CEがインストールされていても
ローカルのDLLが優先されます。(ということらしいです)

sqlce.jpg



●サンプルソース

とりあえず、チュートリアルのコードをパクって書いてみた。
読みづらい・・・。

using System;
using System.Data.SqlServerCe;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
using(SqlCeConnection _conn = new SqlCeConnection(@"Data Source = |DataDirectory|\Northwind.sdf"))
{
SqlCeCommand cmd = new SqlCeCommand();
cmd.Connection = _conn;
cmd.CommandText = "SELECT [Employee ID], [Last Name], [First Name], Photo FROM Employees";
_conn.Open();
using (SqlCeResultSet resultSet = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable))
{
while (resultSet.Read())
{
Console.WriteLine(resultSet["Last Name"]);
}
}
}
}
}
}


●以上です。

動いた!やった!(スクリーンショットはありません)


●組み込みで使えるってことは、monoでも動く?

コンパイル失敗。。。orz
もうちょっと原因調査してみなくては・・・。


$ mcs /t:exe /r:System.Data.dll
/r:System.Data.SqlServerCe.dll Program.cs ./Properties/AssemblyInfo.cs

** (/usr/lib64/mono/1.0/mcs.exe:32149): WARNING **: The class
System.Data.Common.DbConnection could not be loaded, used in
System.Data, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=969db8053d3322ac
Program.cs(10,19): error CS0246: The type or namespace name
`SqlCeConnection' could not be found. Are you missing a using
directive or an assembly reference?

** (/usr/lib64/mono/1.0/mcs.exe:32149): WARNING **: The class
System.Data.Common.DbCommand could not be loaded, used in System.Data,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac
Program.cs(12,17): error CS0246: The type or namespace name
`SqlCeCommand' could not be found. Are you missing a using directive
or an assembly reference?

** (/usr/lib64/mono/1.0/mcs.exe:32149): WARNING **: The class
System.Data.Common.DbDataReader could not be loaded, used in
System.Data, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=969db8053d3322ac
Program.cs(17,17): error CS0246: The type or namespace name
`SqlCeResultSet' could not be found. Are you missing a using directive
or an assembly reference?
Compilation failed: 3 error(s), 0 warnings




ぬの
有用な情報ありがとうございます。
でもなんか記載のURLのものだとモジュールが入らないんですよね・・・。
シコシコググって、こっちを入れたらやっと入りました。

http://www.microsoft.com/downloads/details.aspx?FamilyID=e497988a-c93a-404c-b161-3a0b323dce24&displayLang=ja
2010/11/12(金) 02:41:56 | URL | [ 編集]












管理者にだけ表示を許可する


トラックバックURL: