andrew4582

ADO.NET Command Builder

Aug 15th, 2010
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.90 KB | None | 0 0
  1. using System;
  2. using System.Data;
  3. using System.Text;
  4. using System.Collections.Specialized;
  5.  
  6. /// <summary>
  7. /// The Logical operator for building Command Text
  8. /// </summary>
  9. public enum LogicOperator
  10. {
  11.     None,
  12.     Equals,
  13.     NotEquals,
  14.     GreaterThan,
  15.     LessThan,
  16.     GreaterThanEqual,
  17.     LessThanEqual,
  18.     LikeValue
  19. }
  20. public enum OrderByType
  21. {
  22.     None, Asc, Desc
  23. }
  24. public enum WhereType
  25. {
  26.     None,
  27.     wAnd,
  28.     wAndBeginGroup,
  29.     wAndEndGroup,
  30.     wOr,
  31.     wOrBeginGroup,
  32.     wOrEndGroup
  33. }
  34. /// <summary>
  35. /// Provides class for builder the "WHERE" clause for command text strings
  36. /// </summary>
  37. public class CommandBuilder
  38. {
  39.     private DataTable mTable;
  40.     private StringCollection mWhereCol = new StringCollection();
  41.     private StringCollection mOrderByCol = new StringCollection();
  42.     private bool mAppendTableNameToWhereFields = false;
  43.     private const string m_NULL = "NULL";
  44.  
  45.     public void FilterOnValue(DataColumn column, object value)
  46.     {
  47.         this.FilterOnValue(column.ColumnName, value);
  48.     }
  49.     public void FilterOnValue(string columnName, object value)
  50.     {
  51.         WhereType where = WhereType.None;
  52.  
  53.         if (mWhereCol.Count > 0)
  54.         {
  55.             where = WhereType.wAnd;
  56.         }
  57.         this.FilterOnValue(columnName, value, where, LogicOperator.Equals);
  58.     }
  59.     public void FilterOnValue(DataColumn column, object value, WhereType where, LogicOperator logic)
  60.     {
  61.         this.FilterOnValue(column.ColumnName, value, where, logic);
  62.     }
  63.     public void FilterOnValue(string columnName, object value, WhereType where, LogicOperator logic)
  64.     {
  65.         DataColumn dc = this.getColumn(columnName);
  66.         if (dc == null) return;
  67.         string wherestring = GetWhereString(where);
  68.         if (mWhereCol.Count == 0)
  69.             wherestring = string.Empty;
  70.  
  71.         string beginGroup = "";
  72.         string endGroup = "";
  73.  
  74.         if (where == WhereType.wAndBeginGroup || where == WhereType.wOrBeginGroup)
  75.             beginGroup = "(";
  76.         if (where == WhereType.wAndEndGroup || where == WhereType.wOrEndGroup)
  77.             endGroup = ")";
  78.  
  79.         string sb = wherestring + beginGroup + " " + TableNamePreFix + columnName + " " + GetLogicOperatorString(logic) + " " + WrapLikeClause(logic, GetCommandField(value, dc.DataType)) + endGroup;
  80.         mWhereCol.Add(sb);
  81.     }
  82.  
  83.     public static string GetCommandField(object value, Type type)
  84.     {
  85.         if (value == null || value == Convert.DBNull || type == null || type == Convert.DBNull)
  86.         {
  87.             if (type.Name.ToLower() == "boolean")
  88.                 return "0";
  89.  
  90.             return m_NULL;
  91.         }
  92.  
  93.         switch (type.Name.ToLower())
  94.         {
  95.             case "string":
  96.                 {
  97.                     string val = Convert.ToString(value);
  98.                     if (val == null)
  99.                         return m_NULL;
  100.                     if (val.Trim() == null)
  101.                         return m_NULL;
  102.  
  103.                     return "'" + val.Replace("'", "''") + "'";
  104.                 }
  105.  
  106.             case "datetime":
  107.                 {
  108.                     if (value == Convert.DBNull)
  109.                         return m_NULL;
  110.  
  111.                     DateTime dt = Convert.ToDateTime(value);
  112.                     DateTime d = new DateTime();
  113.                     if (dt == d)
  114.                         return m_NULL;
  115.                     return "CONVERT(DATETIME, '" + dt.ToShortDateString() + "')";
  116.                     //return "'" + Convert.ToString(dt) + "'";
  117.                 }
  118.             case "boolean":
  119.                 {
  120.                     if (value == null)
  121.                         return 0.ToString();
  122.                     bool bl = false;
  123.                     try
  124.                     {
  125.                         bl = Convert.ToBoolean(value);
  126.                     }
  127.                     catch
  128.                     {
  129.                         if (value.ToString() == "1")
  130.                             return 1.ToString();
  131.                         return 0.ToString();
  132.                     }
  133.                     if (bl)
  134.                         return 1.ToString();
  135.                     else
  136.                         return 0.ToString();
  137.                 }
  138.             default:
  139.                 {
  140.                     return Convert.ToString(value);
  141.                 }
  142.         }
  143.     }
  144.     /// <summary>
  145.     /// Retruns the Logical Operator string associated with the LogicOperator enum
  146.     /// </summary>
  147.     /// <param name="logic"></param>
  148.     /// <returns></returns>
  149.     protected string GetLogicOperatorString(LogicOperator logic)
  150.     {
  151.         switch (logic)
  152.         {
  153.             case LogicOperator.Equals: return "=";
  154.             case LogicOperator.NotEquals: return "<>";
  155.             case LogicOperator.GreaterThan: return ">";
  156.             case LogicOperator.LessThan: return "<";
  157.             case LogicOperator.GreaterThanEqual: return ">=";
  158.             case LogicOperator.LessThanEqual: return "<=";
  159.             case LogicOperator.LikeValue: return "like";
  160.             case LogicOperator.None: return string.Empty;
  161.             default: return string.Empty;
  162.         }
  163.     }
  164.     protected string GetWhereString(WhereType where)
  165.     {
  166.         if (where == WhereType.None)
  167.             return String.Empty;
  168.  
  169.         if (where == WhereType.wAnd || where == WhereType.wAndBeginGroup || where == WhereType.wAndEndGroup)
  170.             return "AND";
  171.         else
  172.             return "OR";
  173.     }
  174.     protected object WrapLikeClause(LogicOperator logic, object value)
  175.     {
  176.         if (logic == LogicOperator.LikeValue)
  177.         {
  178.             return Convert.ToString(value);
  179.         }
  180.         else
  181.             return value;
  182.     }
  183.     public void OrderByColumn(string columnName)
  184.     {
  185.         OrderByColumn(columnName, OrderByType.None);
  186.     }
  187.     public void OrderByColumn(string columnName, OrderByType order)
  188.     {
  189.         string comma = string.Empty;
  190.         if (mOrderByCol.Count > 0)
  191.             comma = ",";
  192.  
  193.         string orderClause = order.ToString();
  194.         if (order == OrderByType.None)
  195.             orderClause = string.Empty;
  196.  
  197.  
  198.         mOrderByCol.Add(comma + TableNamePreFix + columnName + " " + orderClause);
  199.     }
  200.     public bool AppendTableNameToWhereFields
  201.     {
  202.         get
  203.         {
  204.             return mAppendTableNameToWhereFields;
  205.         }
  206.         set
  207.         {
  208.             mAppendTableNameToWhereFields = value;
  209.         }
  210.     }
  211.     public string GetFilterClause()
  212.     {
  213.         StringBuilder builder = new StringBuilder(mWhereCol.Count);
  214.  
  215.         foreach (string s in mWhereCol)
  216.         {
  217.             builder.Append(" ");
  218.             builder.Append(s);
  219.         }
  220.         return builder.ToString();
  221.     }
  222.     public string GetOrderClause()
  223.     {
  224.         StringBuilder builder = new StringBuilder(mWhereCol.Count);
  225.         foreach (string s in mOrderByCol)
  226.         {
  227.             builder.Append(s);
  228.         }
  229.         return builder.ToString();
  230.     }
  231.     public string GetWhereClause()
  232.     {
  233.         StringBuilder builder = new StringBuilder(mWhereCol.Count);
  234.         if (mWhereCol.Count > 0)
  235.         {
  236.             builder.Append("WHERE ");
  237.             builder.Append(this.GetFilterClause());
  238.         }
  239.         if (mOrderByCol.Count > 0)
  240.         {
  241.             builder.Append(" ORDER BY ");
  242.             builder.Append(this.GetOrderClause());
  243.         }
  244.         return builder.ToString();
  245.     }
  246.     private string TableNamePreFix
  247.     {
  248.         get
  249.         {
  250.             if (this.AppendTableNameToWhereFields)
  251.             {
  252.                 if (mTable != null)
  253.                 {
  254.                     return mTable.TableName + ".";
  255.                 }
  256.             }
  257.             return string.Empty;
  258.         }
  259.     }
  260.     private DataColumn getColumn(string columnName)
  261.     {
  262.         return mTable.Columns[columnName];
  263.     }
  264.     public CommandBuilder(DataTable table)
  265.     {
  266.         mTable = table;
  267.     }
  268. }
Advertisement
Add Comment
Please, Sign In to add comment