DBアクセス
データアダプタを使用したDBアクセスについて解説します。
接続確認
接続確認用として、SELECT文を実行する以下のコード(C#)を使用しました。
using System;
using System.Data;
using System.Data.SqlClient;
namespace SqlServerExample
{
public class Select1
{
public static void Main(string[] args)
{
// 接続文字列
string constr = "Data Source=192.168.1.2,1031;" +
"Initial Catalog=TestData;" +
"User ID=sta;" +
"Password=passW0rd;" +
"Trusted_Connection=False";
// SQL文字列
string sstr = "SELECT ProductID, ProductName, Price, ProductDescription " +
"FROM Products";
using (SqlConnection dbcon = new SqlConnection(constr))
{
using (SqlDataAdapter da = new SqlDataAdapter(sstr, dbcon))
using (DataTable dt = new DataTable())
{
// SELECT実行
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine("ID:{0} NAME:{1} PRICE:{2} DESCRIPTION:{3}", dr[0], dr[1], dr[2], dr[3]);
}
}
}
}
}
}
/*
* ビルド:
*
* gmcs select1.cs -r:System.Data.dll
*
* 実行:
*
* mono select1.exe
*
*/
> mono select1.exe ID:0 NAME:SQL Server PRICE: DESCRIPTION:SQLServer 2005 Express Edition ID:1 NAME:Clamp PRICE:12.4800 DESCRIPTION:Workbench clamp ID:50 NAME:Flat Head Screwdriver PRICE:3.1700 DESCRIPTION:Flat head ID:75 NAME:Tire Bar PRICE: DESCRIPTION:Tool for changing tires. ID:3000 NAME:3mm Bracket PRICE:0.5200 DESCRIPTION:
「SQL Server Browserサービスを有効」にした場合、接続文字列にインスタンス名を使用した以下の記述が可能になります。
string constr = "Data Source=192.168.1.2\\SQLEXPRESS;" +
"Initial Catalog=TestData;" +
"User ID=sta;" +
"Password=passW0rd;";
動作確認
「4.PostgreSQL編ーDBアクセスー動作確認」で使用したコンソールプログラムを使用して動作確認を行います。構成情報ファイル(cs.config)に以下の内容を追加します。
<?xml version="1.0" encoding="UTF-8" ?>
<connectionStrings>
<add name="Sqlite" providerName="Mono.Data.Sqlite"
connectionString="Data Source=/home/sta/data/TestData.db" />
<add name="Postgresql" providerName="Npgsql"
connectionString="Server=localhost;Port=5432;User Id=postgres;Password=password;Database=TestData;" />
<add name="MySql" providerName="MySql.Data"
connectionString="Server=192.168.1.2;Database=TestData;Uid=sta;Pwd=password;CharSet=utf8" />
<add name="SqlServer" providername="System.Data.SqlClient"
connectionstring="Data Source=192.168.1.2,1031;Initial Catalog=TestData;User ID=sta;Password=passW0rd;Trusted_Connection=False" />
</connectionStrings>
> mono client.exe Connect to 1:SQLite 2:PostgreSQL 3:MySQL 4:SqlServer 5:Oracle ?> 4 状態:Unchanged ID:0 NAME:SQL Server PRICE: DESCRIPTION:SQLServer 2005 Express Edition 状態:Unchanged ID:1 NAME:Clamp PRICE:12.4800 DESCRIPTION:Workbench clamp 状態:Unchanged ID:50 NAME:Flat Head Screwdriver PRICE:3.1700 DESCRIPTION:Flat head 状態:Unchanged ID:75 NAME:Tire Bar PRICE: DESCRIPTION:Tool for changing tires. 状態:Unchanged ID:3000 NAME:3mm Bracket PRICE:0.5200 DESCRIPTION: 1:INSERT 2:UPDATE 3:DELETE 4:SUBMIT 5:RELOAD 6:EXIT ?> 3 ID(int)?> 3000 状態:Unchanged ID:0 NAME:SQL Server PRICE: DESCRIPTION:SQLServer 2005 Express Edition 状態:Unchanged ID:1 NAME:Clamp PRICE:12.4800 DESCRIPTION:Workbench clamp 状態:Unchanged ID:50 NAME:Flat Head Screwdriver PRICE:3.1700 DESCRIPTION:Flat head 状態:Unchanged ID:75 NAME:Tire Bar PRICE: DESCRIPTION:Tool for changing tires. 1:INSERT 2:UPDATE 3:DELETE 4:SUBMIT 5:RELOAD 6:EXIT ?> 4 状態:Unchanged ID:0 NAME:SQL Server PRICE: DESCRIPTION:SQLServer 2005 Express Edition 状態:Unchanged ID:1 NAME:Clamp PRICE:12.4800 DESCRIPTION:Workbench clamp 状態:Unchanged ID:50 NAME:Flat Head Screwdriver PRICE:3.1700 DESCRIPTION:Flat head 状態:Unchanged ID:75 NAME:Tire Bar PRICE: DESCRIPTION:Tool for changing tires. 1:INSERT 2:UPDATE 3:DELETE 4:SUBMIT 5:RELOAD 6:EXIT ?> 6
データテーブル内のデータ行の削除操作を行った場合、その行のRowStateプロパティがDeletedに変更されます。RowStateプロパティがDeletedのデータ行の各カラムにアクセスした場合、アクセス不可として例外が発生します。そのため、データテーブルの内容を表示する場合、RowStateプロパティを判定して、表示を行う必要があります。
private static void ShowData()
{
foreach (DataRow dr in dt.Rows)
{
if (dr.RowState != DataRowState.Deleted)
{
Console.Write("状態:{0} ", dr.RowState);
Console.WriteLine("ID:{0} NAME:{1} PRICE:{2} DESCRIPTION:{3}", dr[0], dr[1], dr[2], dr[3]);
}
}
}
注意事項
パラメータ識別子
SQL文字列内で使用するパラメータの識別子として、「@」が使用できます。
DbProviderFactories
Mono 1.9.1の「machine.config(2.0 profile)」には「System.Data.SqlClient」用のデータプロバイダファクトリ情報が標準で登録されているので、特に何か追加する等の対応は必要ありません。
おまけ
MonoDevelopからSQL Server DBへの操作(クエリの実行)が可能です。
MonoDevelopを起動し、[データベースブラウザビュー]内の[データベース接続]アイコンを右クリックして、[接続の追加]を選択し、以下の内容を入力します。
| 設定項目 | 設定内容 |
| 型 | SQL Server database |
| 名前 | TestData(SQL Server 2005 Express) |
| サーバ | 192.168.1.2 |
| ポート | 1031 |
| ユーザ名 | sta |
| パスワード | passW0rd |
| データベース | TestData |
MonoDevelopのメニューから[ツール]-[データベース]-[データベースをクエリ]を選択する(または、[データベースブラウザビュー]内の[TestData(SQL Server 2005 Express)]アイコンをダブルクリックする)と、SQLクエリ入力画面が表示されます。
