コードはこんな感じ。
const string CONNECT_TEMPLATE = "Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source={0};" +
";Extended Properties=\"Excel 8.0;HDR=YES;\"";
private void button1_Click(object sender, EventArgs e)
{
//using System.Data.OleDb;
//using System.IO;
string fileName = @"c:\temp\test.xls";
string sql = "";
//ファイルがあったら消す
if (File.Exists(fileName))
{
File.Delete(fileName);
}
//接続文字列
string conString = string.Format(CONNECT_TEMPLATE, fileName);
//コネクションの作成
using (OleDbConnection con = new OleDbConnection(conString))
{
con.Open();
//テーブルの作成
System.Diagnostics.Debug.WriteLine("■テーブルの作成");
sql = "CREATE TABLE USER_DATA (ID char(255), NAME char(255), AGE int, ADDRESS char(255), UPD date)";
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
cmd.ExecuteNonQuery();
}
//情報の登録
sql = "INSERT INTO USER_DATA(ID,NAME,AGE,ADDRESS,UPD) VALUES (?, ?, ?, ?, ?)";
System.Diagnostics.Debug.WriteLine("■情報の登録");
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
for (int i = 0; i < 10; i++)
{
cmd.Parameters.Clear();
cmd.Parameters.Add("ID", OleDbType.VarChar).Value = "ID" + i.ToString();
cmd.Parameters.Add("NAME", OleDbType.VarChar).Value = "なまえ" + i.ToString();
cmd.Parameters.Add("AGE",OleDbType.Integer).Value = i+10;
cmd.Parameters.Add("ADDRESS", OleDbType.VarChar).Value = "住所" + i.ToString();
cmd.Parameters.Add("UPD", OleDbType.Date).Value = DateTime.Now;
cmd.ExecuteNonQuery();
}
}
//最大値の取得
sql = "SELECT MAX(AGE) FROM USER_DATA";
System.Diagnostics.Debug.WriteLine("■最大値の取得");
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
//スカラー値を取得します
object obj = cmd.ExecuteScalar();
StringBuilder sb = new StringBuilder();
sb.AppendLine("--------------------------------------");
sb.Append("実行結果 [").Append(obj).Append("]\r\n");
sb.AppendLine("--------------------------------------");
System.Diagnostics.Debug.WriteLine(sb.ToString());
}
//参照系SQLの実行
System.Diagnostics.Debug.WriteLine("■参照系SQLの実行");
sql = "SELECT * FROM USER_DATA";
using (OleDbCommand cmd = new OleDbCommand(sql, con))
using (OleDbDataReader rd = cmd.ExecuteReader())
{
PrintData(rd);
}
//「この ISAM では、リンク テーブル内のデータを削除することはできません。」
//という例外が発生する。Excelでが行削除ができないらしい。
////削除SQLの実行
//sql = "DELETE FROM USER_DATA WHERE AGE = 17";
//using (OleDbCommand cmd = new OleDbCommand(sql, con))
//{
// //更新処理を実行します
// int result = cmd.ExecuteNonQuery();
// StringBuilder sb = new StringBuilder();
// sb.AppendLine("--------------------------------------");
// sb.Append("削除件数 [").Append(result).Append("]\r\n");
// sb.AppendLine("--------------------------------------");
// System.Diagnostics.Debug.WriteLine(sb.ToString());
//}
//更新SQLの実行
sql = "UPDATE USER_DATA SET ADDRESS='更新したよーん' WHERE AGE > 16";
System.Diagnostics.Debug.WriteLine("■更新SQLの実行");
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
//更新処理を実行します
int result = cmd.ExecuteNonQuery();
StringBuilder sb = new StringBuilder();
sb.AppendLine("--------------------------------------");
sb.Append("更新件数 [").Append(result).Append("]\r\n");
sb.AppendLine("--------------------------------------");
System.Diagnostics.Debug.WriteLine(sb.ToString());
}
//SQL実行結果の確認
System.Diagnostics.Debug.WriteLine("■SQL実行結果の確認");
sql = "SELECT * FROM USER_DATA WHERE AGE > 15";
using (OleDbCommand cmd = new OleDbCommand(sql, con))
using (OleDbDataReader rd = cmd.ExecuteReader())
{
PrintData(rd);
}
}
}
private void PrintData(OleDbDataReader rd)
{
StringBuilder sb = new StringBuilder();
//カラム名を取得し、カンマ区切りで編集します
sb.AppendLine("--------------------------------------");
for (int cnt = 0; cnt < rd.FieldCount; cnt++)
{
sb.Append(rd.GetName(cnt)).Append(",");
}
sb.Remove(sb.Length - 1, 1);
sb.AppendLine("");
sb.AppendLine("--------------------------------------");
//データを取得しカンマ区切りで編集します
for (int row = 0; rd.Read(); row++)
{
for (int col = 0; col < rd.FieldCount; col++)
{
sb.Append(rd.GetValue(col)).Append(",");
}
sb.Remove(sb.Length - 1, 1);
sb.AppendLine("");
}
sb.AppendLine("--------------------------------------");
System.Diagnostics.Debug.WriteLine(sb.ToString());
}
@"Data Source={0};" +
";Extended Properties=\"Excel 8.0;HDR=YES;\"";
private void button1_Click(object sender, EventArgs e)
{
//using System.Data.OleDb;
//using System.IO;
string fileName = @"c:\temp\test.xls";
string sql = "";
//ファイルがあったら消す
if (File.Exists(fileName))
{
File.Delete(fileName);
}
//接続文字列
string conString = string.Format(CONNECT_TEMPLATE, fileName);
//コネクションの作成
using (OleDbConnection con = new OleDbConnection(conString))
{
con.Open();
//テーブルの作成
System.Diagnostics.Debug.WriteLine("■テーブルの作成");
sql = "CREATE TABLE USER_DATA (ID char(255), NAME char(255), AGE int, ADDRESS char(255), UPD date)";
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
cmd.ExecuteNonQuery();
}
//情報の登録
sql = "INSERT INTO USER_DATA(ID,NAME,AGE,ADDRESS,UPD) VALUES (?, ?, ?, ?, ?)";
System.Diagnostics.Debug.WriteLine("■情報の登録");
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
for (int i = 0; i < 10; i++)
{
cmd.Parameters.Clear();
cmd.Parameters.Add("ID", OleDbType.VarChar).Value = "ID" + i.ToString();
cmd.Parameters.Add("NAME", OleDbType.VarChar).Value = "なまえ" + i.ToString();
cmd.Parameters.Add("AGE",OleDbType.Integer).Value = i+10;
cmd.Parameters.Add("ADDRESS", OleDbType.VarChar).Value = "住所" + i.ToString();
cmd.Parameters.Add("UPD", OleDbType.Date).Value = DateTime.Now;
cmd.ExecuteNonQuery();
}
}
//最大値の取得
sql = "SELECT MAX(AGE) FROM USER_DATA";
System.Diagnostics.Debug.WriteLine("■最大値の取得");
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
//スカラー値を取得します
object obj = cmd.ExecuteScalar();
StringBuilder sb = new StringBuilder();
sb.AppendLine("--------------------------------------");
sb.Append("実行結果 [").Append(obj).Append("]\r\n");
sb.AppendLine("--------------------------------------");
System.Diagnostics.Debug.WriteLine(sb.ToString());
}
//参照系SQLの実行
System.Diagnostics.Debug.WriteLine("■参照系SQLの実行");
sql = "SELECT * FROM USER_DATA";
using (OleDbCommand cmd = new OleDbCommand(sql, con))
using (OleDbDataReader rd = cmd.ExecuteReader())
{
PrintData(rd);
}
//「この ISAM では、リンク テーブル内のデータを削除することはできません。」
//という例外が発生する。Excelでが行削除ができないらしい。
////削除SQLの実行
//sql = "DELETE FROM USER_DATA WHERE AGE = 17";
//using (OleDbCommand cmd = new OleDbCommand(sql, con))
//{
// //更新処理を実行します
// int result = cmd.ExecuteNonQuery();
// StringBuilder sb = new StringBuilder();
// sb.AppendLine("--------------------------------------");
// sb.Append("削除件数 [").Append(result).Append("]\r\n");
// sb.AppendLine("--------------------------------------");
// System.Diagnostics.Debug.WriteLine(sb.ToString());
//}
//更新SQLの実行
sql = "UPDATE USER_DATA SET ADDRESS='更新したよーん' WHERE AGE > 16";
System.Diagnostics.Debug.WriteLine("■更新SQLの実行");
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
//更新処理を実行します
int result = cmd.ExecuteNonQuery();
StringBuilder sb = new StringBuilder();
sb.AppendLine("--------------------------------------");
sb.Append("更新件数 [").Append(result).Append("]\r\n");
sb.AppendLine("--------------------------------------");
System.Diagnostics.Debug.WriteLine(sb.ToString());
}
//SQL実行結果の確認
System.Diagnostics.Debug.WriteLine("■SQL実行結果の確認");
sql = "SELECT * FROM USER_DATA WHERE AGE > 15";
using (OleDbCommand cmd = new OleDbCommand(sql, con))
using (OleDbDataReader rd = cmd.ExecuteReader())
{
PrintData(rd);
}
}
}
private void PrintData(OleDbDataReader rd)
{
StringBuilder sb = new StringBuilder();
//カラム名を取得し、カンマ区切りで編集します
sb.AppendLine("--------------------------------------");
for (int cnt = 0; cnt < rd.FieldCount; cnt++)
{
sb.Append(rd.GetName(cnt)).Append(",");
}
sb.Remove(sb.Length - 1, 1);
sb.AppendLine("");
sb.AppendLine("--------------------------------------");
//データを取得しカンマ区切りで編集します
for (int row = 0; rd.Read(); row++)
{
for (int col = 0; col < rd.FieldCount; col++)
{
sb.Append(rd.GetValue(col)).Append(",");
}
sb.Remove(sb.Length - 1, 1);
sb.AppendLine("");
}
sb.AppendLine("--------------------------------------");
System.Diagnostics.Debug.WriteLine(sb.ToString());
}
■実行結果
■テーブルの作成
■情報の登録
■最大値の取得
--------------------------------------
実行結果 [19]
--------------------------------------
■参照系SQLの実行
--------------------------------------
ID,NAME,AGE,ADDRESS,UPD
--------------------------------------
ID0,なまえ0,10,住所0,2009/04/15 0:07:31
ID1,なまえ1,11,住所1,2009/04/15 0:07:31
ID2,なまえ2,12,住所2,2009/04/15 0:07:31
ID3,なまえ3,13,住所3,2009/04/15 0:07:31
ID4,なまえ4,14,住所4,2009/04/15 0:07:31
ID5,なまえ5,15,住所5,2009/04/15 0:07:31
ID6,なまえ6,16,住所6,2009/04/15 0:07:31
ID7,なまえ7,17,住所7,2009/04/15 0:07:31
ID8,なまえ8,18,住所8,2009/04/15 0:07:31
ID9,なまえ9,19,住所9,2009/04/15 0:07:31
--------------------------------------
■更新SQLの実行
--------------------------------------
更新件数 [3]
--------------------------------------
■SQL実行結果の確認
--------------------------------------
ID,NAME,AGE,ADDRESS,UPD
--------------------------------------
ID6,なまえ6,16,住所6,2009/04/15 0:07:31
ID7,なまえ7,17,更新したよーん,2009/04/15 0:07:31
ID8,なまえ8,18,更新したよーん,2009/04/15 0:07:31
ID9,なまえ9,19,更新したよーん,2009/04/15 0:07:31
--------------------------------------
0 件のコメント:
コメントを投稿