LANGUAGE | スカ友 | 俺、関東の国王だけど (イケメンだ(28)、彼女がほしい) 人類の品種 言葉の起源 虫は宇宙人です 日本語は海豚の言葉に由来します ペンギン(ウルトラマン) 関東無政府主義国へようこそ! simulationライブラリで純粋な関数式プログラミングを
SQLライブラリ
0   関東の国王      2019年1月31日 木 13:56
SQLのライブラリです。これでデータベースのアクセスが使いやすくなります。

using System;
using System.Collections.Generic;
using System.Web;
using System.Data.Odbc;
using System.Text;

public class SqlParam
{
   public OdbcType Type;
   public object Value;

   private SqlParam() { }

   public SqlParam(OdbcType type, object value)
   {
       Type = type;
       Value = value;
   }

   public static SqlCmd operator +(SqlParam a, SqlParam b)
   {
       return (SqlCmd)a + b;
   }
   
   public static SqlCmd operator +(SqlParam a, string b)
   {
       return (SqlCmd)a + b;
   }
   
   public static SqlCmd operator +(SqlParam a, char b)
   {
       return (SqlCmd)a + b;
   }

   public static SqlCmd operator +(string a, SqlParam b)
   {
       return (SqlCmd)a + b;
   }

   public static SqlCmd operator +(char a, SqlParam b)
   {
       return (SqlCmd)a + b;
   }
}

public class SqlCmd
{
   private List<object> Cmd = new List<object>();

   private SqlCmd() { }

   public static implicit operator SqlCmd(string x)
   {
       if (x == null)
           return null;

       SqlCmd ret = new SqlCmd();

       ret.Cmd.Add(x);

       return ret;
   }

   public static implicit operator SqlCmd(char x)
   {
       SqlCmd ret = new SqlCmd();

       ret.Cmd.Add(x);

       return ret;
   }

   public static implicit operator SqlCmd(SqlParam x)
   {
       if (x == null)
           return null;

       SqlCmd ret = new SqlCmd();

       ret.Cmd.Add(x);

       return ret;
   }

   public static SqlCmd operator +(SqlCmd a, SqlCmd b)
   {
       if (a == null)
           return b;

       if (b == null)
           return a;

       SqlCmd ret = new SqlCmd();

       ret.Cmd.AddRange(a.Cmd);
       ret.Cmd.AddRange(b.Cmd);

       return ret;
   }

   public OdbcCommand SetCommand(OdbcCommand cmd)
   {
       cmd.CommandText = TakakuG.For(0, Cmd.Count - 1, new StringBuilder(),
           (sum, i) =>
           {
               if (Cmd[i] is string || Cmd[i] is char) return sum.Append(Cmd[i]);
               else if (Cmd[i] is SqlParam) return sum.Append('?');
               else throw new Exception();
           }).ToString();

       cmd.Parameters.Clear();

       foreach (object i in Cmd)
           if (i is SqlParam)
               cmd.Parameters.Add("", ((SqlParam)i).Type).Value = ((SqlParam)i).Value;

       return cmd;
   }

   public void ExecNQ(OdbcConnection conn)
   {
       SetCommand(conn.CreateCommand()).ExecuteNonQuery();
   }

   public object ExecS(OdbcConnection conn)
   {
       return SetCommand(conn.CreateCommand()).ExecuteScalar();
   }

   public OdbcDataReader ExecR(OdbcConnection conn)
   {
       return SetCommand(conn.CreateCommand()).ExecuteReader();
   }
}
この記事は 2019年5月15日 水 4:31 に作者によって編集されました
名前      編集用パスワード(省略可)    パスワードの記憶
数式 αβγ IPA http:// 画像 B I U
(添付ファイルは http://up.x0000.net/ にアップロードしてください)