INSERT
INSERT文の実行によるデータの挿入を行うサンプルコードです。
using System; using System.Data; using System.Data.Common; namespace SqliteExample { public class NewType2Insert { public static void Main(string[] args) { if (args.Length != 2) { Console.WriteLine("コマンドライン引数エラー"); Console.WriteLine("Usage: insert2.exe [id] [name]"); return; } string dpstr = "Mono.Data.Sqlite"; string constr = "Data Source=/home/sta/data/TestData.db"; // パターン1 //string sqlstr = "INSERT INTO Products (ProductID, " + // "ProductName, Price, " + // "ProductDescription) " + // "VALUES (2, 'Hammer', 10, 'トンカチ')"; // パターン2 //string sqlstr = "INSERT INTO Products " + // "VALUES(3, 'Wrench', 10, 'レンチ')"; // パターン3 //string sqlstr = "INSERT INTO Products " + // "(ProductID, ProductName) " + // "VALUES ('{0}', '{1}')"; //sqlstr = String.Format(sqlstr, args[0], args[1]); // パターン4 //string sqlstr = "INSERT INTO Products " + // "(ProductID, ProductName) " + // "VALUES (?, ?)"; // パターン5 string sqlstr = "INSERT INTO Products " + "(ProductID, ProductName) " + "VALUES (@P1, @P2)"; DbProviderFactory dpf = DbProviderFactories.GetFactory(dpstr); // 1.DBコネクションオブジェクト作成 using (DbConnection dbcon = dpf.CreateConnection()) { dbcon.ConnectionString = constr; // 2.DBコネクションオープン dbcon.Open(); try { // トランザクション開始 using (DbTransaction tran = dbcon.BeginTransaction()) // 3.DBコマンドオブジェクト作成 using (DbCommand dbcmd = dbcon.CreateCommand()) { dbcmd.CommandText = sqlstr; // パラメータ設定 // パターン4 //DbParameter p1 = dbcmd.CreateParameter(); //p1.Value = args[0]; //dbcmd.Parameters.Add(p1); //DbParameter p2 = dbcmd.CreateParameter(); //p2.Value = args[1]; //dbcmd.Parameters.Add(p2); // パターン5 // @P1 DbParameter p1 = dbcmd.CreateParameter(); p1.ParameterName = "@P1"; p1.Value = args[0]; dbcmd.Parameters.Add(p1); // @P2 DbParameter p2 = dbcmd.CreateParameter(); p2.ParameterName = "@P2"; p2.Value = args[1]; dbcmd.Parameters.Add(p2); // トランザクション設定 dbcmd.Transaction = tran; try { // 4.DBコマンド実行 dbcmd.ExecuteNonQuery(); // コミット tran.Commit(); } catch(Exception ex) { // ロールバック tran.Rollback(); Console.WriteLine("更新エラー: {0}", ex.Message); } } } finally { if (dbcon != null) { // 5.DBコネクションクローズ dbcon.Close(); } } } } } } /* * ビルド: * * gmcs insert2.cs -r:System.Data.dll * * 実行: * * mono insert2.exe [id] [name] * */
SQL文字列
SQL文字列にいくつかパターンを設定して動作確認を行いました。パラメータを使用したパターン4(位置指定)、パターン5(名前付き)を試しましたが、両方とも問題はありませんでした。
トランザクション
データ更新を伴うことから、トランザクション処理を付加しています。
ExecuteNonQuery
INSERT文の実行にコマンドオブジェクトのExecuteNonQueryメソッドを使用しています。INSERT文の様に問合せ結果を必要としない場合に使用します(実際にはint型の戻り値(処理件数)がありますが、今回は使用していません)。SELECT文の実行には問合せ結果を必要とするのでExecuteReaderメソッドを使用しています。
UPDATE
UPDATE文の実行によるデータの更新を行うサンプルコードです。
using System; using System.Data; using System.Data.Common; namespace SqliteExample { public class NewType2Update { public static void Main(string[] args) { if (args.Length != 3) { Console.WriteLine("コマンドライン引数エラー"); Console.WriteLine( "Usage: update2.exe [id] [price] [description]"); return; } string dpstr = "Mono.Data.Sqlite"; string constr = "Data Source=/home/sta/data/TestData.db"; // パターン1 //string sqlstr = "UPDATE Products SET Price = 11 " + // "WHERE ProductID = 2"; // パターン2 //string sqlstr = "UPDATE Products SET Price = 11, " + // "ProductDescription = 'Wrench' " + // "WHERE ProductID = 3"; // パターン3 //string sqlstr = "UPDATE Products SET Price = {0}, " + // "ProductDescription = '{1}' " + // "WHERE ProductID = {2}"; //sqlstr = String.Format(sqlstr, args[1], args[2], args[0]); // パターン4 //string sqlstr = "UPDATE Products SET Price = ?, " + // "ProductDescription = ? " + // "WHERE ProductID = ?"; // パターン5 string sqlstr = "UPDATE Products SET Price = @P1, " + "ProductDescription = @P2 " + "WHERE ProductID = @P3"; DbProviderFactory dpf = DbProviderFactories.GetFactory(dpstr); // 1.DBコネクションオブジェクト作成 using (DbConnection dbcon = dpf.CreateConnection()) { dbcon.ConnectionString = constr; // 2.DBコネクションオープン dbcon.Open(); try { // トランザクション開始 using (DbTransaction tran = dbcon.BeginTransaction()) // 3.DBコマンドオブジェクト作成 using (DbCommand dbcmd = dbcon.CreateCommand()) { dbcmd.CommandText = sqlstr; // パラメータ設定 // パターン4 //DbParameter p1 = dbcmd.CreateParameter(); //p1.Value = args[1]; //dbcmd.Parameters.Add(p1); //DbParameter p2 = dbcmd.CreateParameter(); //p2.Value = args[2]; //dbcmd.Parameters.Add(p2); //DbParameter p3 = dbcmd.CreateParameter(); //p3.Value = args[0]; //dbcmd.Parameters.Add(p3); // パターン5 // @P1 DbParameter p1 = dbcmd.CreateParameter(); p1.ParameterName = "@P1"; p1.Value = args[1]; dbcmd.Parameters.Add(p1); // @P2 DbParameter p2 = dbcmd.CreateParameter(); p2.ParameterName = "@P2"; p2.Value = args[2]; dbcmd.Parameters.Add(p2); // @P3 DbParameter p3 = dbcmd.CreateParameter(); p3.ParameterName = "@P3"; p3.Value = args[0]; dbcmd.Parameters.Add(p3); // トランザクション設定 dbcmd.Transaction = tran; try { // 4.DBコマンド実行 dbcmd.ExecuteNonQuery(); // コミット tran.Commit(); } catch(Exception ex) { // ロールバック tran.Rollback(); Console.WriteLine("更新エラー: {0}", ex.Message); } } } finally { if (dbcon != null) { // 5.DBコネクションクローズ dbcon.Close(); } } } } } } /* * ビルド: * * gmcs update2.cs -r:System.Data.dll * * 実行: * * mono update2.exe [id] [price] [description] * */
DELETE
DELETE文の実行によるデータの削除を行うサンプルコードです。
using System; using System.Data; using System.Data.Common; namespace SqliteExample { public class NewType2Delete { public static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine("コマンドライン引数エラー"); Console.WriteLine("Usage: delete2.exe [id]"); return; } string dpstr = "Mono.Data.Sqlite"; string constr = "Data Source=/home/sta/data/TestData.db"; // パターン1 //string sqlstr = "DELETE FROM Products WHERE ProductID = ?"; // パターン2 string sqlstr = "DELETE FROM Products WHERE ProductID = @P1"; DbProviderFactory dpf = DbProviderFactories.GetFactory(dpstr); // 1.DBコネクションオブジェクト作成 using (DbConnection dbcon = dpf.CreateConnection()) { dbcon.ConnectionString = constr; // 2.DBコネクションオープン dbcon.Open(); try { // トランザクション開始 using (DbTransaction tran = dbcon.BeginTransaction()) // 3.DBコマンドオブジェクト作成 using (DbCommand dbcmd = dbcon.CreateCommand()) { dbcmd.CommandText = sqlstr; // パラメータ設定 DbParameter p1 = dbcmd.CreateParameter(); // パターン2 // @P1 p1.ParameterName = "@P1"; p1.Value = args[0]; dbcmd.Parameters.Add(p1); // トランザクション設定 dbcmd.Transaction = tran; try { // 4.DBコマンド実行 dbcmd.ExecuteNonQuery(); // コミット tran.Commit(); } catch(Exception ex) { // ロールバック tran.Rollback(); Console.WriteLine("更新エラー: {0}", ex.Message); } } } finally { if (dbcon != null) { // 5.DBコネクションクローズ dbcon.Close(); } } } } } } /* * ビルド: * * gmcs delete2.cs -r:System.Data.dll * * 実行: * * mono delete2.exe [id] * */
次の記事では
次の記事では今回の設定をもとに、データアダプタを使ったDBアクセスについて解説します。