zoukankan      html  css  js  c++  java
  • 超级简单:一个简单的SQL工具BuildQuery

    /Files/zhuqil/BuildQuery.rar

    BuildQuery类是能快速,容易地构建一个复杂的INSERT或者UPDATE 的SQL查询语句。这个类将接收的一些参数,输出有效的SQL语句。它有一个方法能刷新内部数据,因此这个类可以无数次使用,而无需反复创建和销毁实例对象。Buid,IDSettings,和FlushAllData 方法用于设置数据。 Insert, Update, 和Delete 方法用于处理数据。只有 Build 和IDSettings带参数。  

    代码
       public class BuildQuery
        {
            
    #region Class Variables
            
    int numFieldsCount, dicpos;
            Dictionary
    <stringstring> dicFields = new Dictionary<stringstring>();
            Dictionary
    <stringstring> dicData = new Dictionary<stringstring>();
            Dictionary
    <stringbool> dicQuotes = new Dictionary<stringbool>();
            List
    <string> listIDFields = new List<string>();
            List
    <string> listIDValues = new List<string>();
            List
    <bool> listIDQuotes = new List<bool>();
            List
    <string> listIDOperators = new List<string>();
            Boolean IdentityCheck;
            
    string strTable;
            
    #endregion

            
    #region Constructor
            
    /// <summary>
            
    /// Creates an instance of this class.
            
    /// </summary>
            public BuildQuery()
            {
            }
            
    #endregion

            
    #region Properties
            
    /// <summary>
            
    /// Gets or sets the table that the resulting query will work with.
            
    /// </summary>
            public string Table
            {
                
    get
                {
                    
    return strTable;
                }
                
    set
                {
                    strTable 
    = value;
                }
            }

            
    /// <summary>
            
    /// Gets or sets whether the query is set to return a new identity value.
            
    /// </summary>
            public bool GetIdentity
            {
                
    get
                {
                    
    return IdentityCheck;
                }
                
    set
                {
                    IdentityCheck 
    = value;
                }
            }
            
    #endregion

            
    #region Methods
            
    /// <summary>
            
    /// Clears all of the internal dictionaries so that a new query can be created.
            
    /// </summary>
            public void FlushAllData()
            {
                numFieldsCount 
    = 0;
                dicpos 
    = 0;
                dicFields.Clear();
                dicData.Clear();
                dicQuotes.Clear();
                listIDFields.Clear();
                listIDValues.Clear();
                listIDQuotes.Clear();
                listIDOperators.Clear();
            }

            
    /// <summary>
            
    /// Adds data to the query.
            
    /// </summary>
            
    /// <param name="InputField">String value containing the column in which the data will appear.</param>
            
    /// <param name="InputData">String value containing the data that is to be used.</param>
            
    /// <param name="InputQuotes">Boolean value indicating whether the data should be surrounded by quotes.</param>
            public void Build(string InputField, string InputData, bool InputQuotes)
            {
                
    if (!(dicFields.ContainsKey(InputField)))
                {
                    dicFields.Add(InputField, InputField);
                    dicData.Add(InputField, InputData);
                    dicQuotes.Add(InputField, InputQuotes);
                }
                
    else
                {
                    dicData[InputField] 
    = InputData;
                    dicQuotes[InputField] 
    = InputQuotes;
                }
            }

            
    /// <summary>
            
    /// Sets the WHERE portion of the query (if applicable) using the specified operator (default is "=".)
            
    /// </summary>
            
    /// <param name="IDField">String containing the column to be used.</param>
            
    /// <param name="IDValue">String containing the value to be used.</param>
            
    /// <param name="IDQuotes">Boolean indicating whether the value should have quotes around it.</param>
            public void IDSettings(string IDField, string IDValue, bool IDQuotes)
            {
                listIDFields.Add(IDField);
                listIDValues.Add(IDValue);
                listIDQuotes.Add(IDQuotes);
                listIDOperators.Add(
    "=");
            }

            
    /// <summary>
            
    /// Sets the WHERE portion of the query (if applicable) using the specified operator (default is "=".)
            
    /// </summary>
            
    /// <param name="IDField">String containing the column to be used.</param>
            
    /// <param name="IDValue">String containing the value to be used.</param>
            
    /// <param name="IDQuotes">Boolean indicating whether the value should have quotes around it.</param>
            
    /// <param name="IDOperator">String containing the logic operator to be used in place of the default.</param>
            public void IDSettings(string IDField, string IDValue, bool IDQuotes, string IDOperator)
            {
                listIDFields.Add(IDField);
                listIDValues.Add(IDValue);
                listIDQuotes.Add(IDQuotes);
                listIDOperators.Add(IDOperator);
            }

            
    /// <summary>
            
    /// Returns an Input query using the data provided.
            
    /// </summary>
            public string Insert()
            {
                StringBuilder InsertString 
    = new StringBuilder();
                dicpos 
    = 0;
                numFieldsCount 
    = dicData.Count;
                InsertString.AppendFormat(
    "INSERT INTO {0} (", strTable);
                
    //Put all of the fields into the query
                foreach (KeyValuePair<stringstring> I in dicFields)
                {
                    InsertString.Append(I.Value);
                    dicpos
    ++;
                    
    if (dicpos + 1 <= numFieldsCount)
                    {
                        InsertString.Append(
    "");
                    }
                }
                dicpos 
    = 0;
                InsertString.Append(
    ") VALUES (");
                
    //Put all of the data into the query
                foreach (KeyValuePair<stringstring> K in dicData)
                {
                    
    if (dicQuotes[K.Key])
                    {
                        InsertString.Append(
    "'");
                    }
                    InsertString.Append(dicData[K.Key]);
                    
    if (dicQuotes[K.Key])
                    {
                        InsertString.Append(
    "'");
                    }
                    dicpos
    ++;
                    
    if (dicpos + 1 <= numFieldsCount)
                    {
                        InsertString.Append(
    "");
                    }
                }
                InsertString.Append(
    ")");
                
    if (IdentityCheck)
                {
                    InsertString.AppendFormat(
    "SET NOCOUNT ON;{0};SELECT @@Identity As LastID", InsertString.ToString());
                }
                
    return InsertString.ToString();
            }

            
    /// <summary>
            
    /// Returns an Update query using the data provided.
            
    /// </summary>
            public string Update()
            {
                StringBuilder UpdateString 
    = new StringBuilder();
                dicpos 
    = 0;
                numFieldsCount 
    = dicData.Count;
                UpdateString.AppendFormat(
    "UPDATE {0} SET ", strTable);
                
    //Match up fields and data
                foreach (KeyValuePair<stringstring> I in dicFields)
                {
                    UpdateString.AppendFormat(
    "{0} = ", I.Value);
                    
    if (dicQuotes[I.Key])
                    {
                        UpdateString.Append(
    "'");
                    }
                    UpdateString.Append(dicData[I.Key]);
                    
    if (dicQuotes[I.Key])
                    {
                        UpdateString.Append(
    "'");
                    }
                    dicpos
    ++;
                    
    if (dicpos + 1 <= numFieldsCount)
                    {
                        UpdateString.Append(
    "");
                    }
                }
                UpdateString.Append(
    " WHERE ");
                
    int Conditions = 0;
                
    for (int IDCount = 0; IDCount < listIDFields.Count; IDCount++)
                {
                    
    if (Conditions > 0)
                    {
                        UpdateString.Append(
    " AND ");
                    }
                    UpdateString.AppendFormat(
    "{0} {1}", listIDFields[IDCount], listIDOperators[IDCount]);
                    
    if (listIDQuotes[IDCount])
                    {
                        UpdateString.Append(
    "'");
                    }
                    UpdateString.Append(listIDValues[IDCount]);
                    
    if (listIDQuotes[IDCount])
                    {
                        UpdateString.Append(
    "'");
                    }
                    Conditions
    ++;
                }
                
    return UpdateString.ToString();
            }

            
    /// <summary>
            
    /// Returns a Delete query using the data provided.
            
    /// </summary>
            public string Delete()
            {
                StringBuilder DeleteString 
    = new StringBuilder();
                DeleteString.AppendFormat(
    "DELETE FROM {0} WHERE ", strTable);
                
    int Conditions = 0;
                
    for (int IDCount = 0; IDCount < listIDFields.Count; IDCount++)
                {
                    
    if (Conditions > 0)
                    {
                        DeleteString.Append(
    " AND ");
                    }
                    DeleteString.AppendFormat(
    "{0} {1}", listIDFields[IDCount], listIDOperators[IDCount]);
                    
    if (listIDQuotes[IDCount])
                    {
                        DeleteString.Append(
    "'");
                    }
                    DeleteString.Append(listIDValues[IDCount]);
                    
    if (listIDQuotes[IDCount])
                    {
                        DeleteString.Append(
    "'");
                    }
                    Conditions
    ++;
                }
                
    return DeleteString.ToString();
            }
            
    #endregion
        }

    BuildQuery类的Build是用来接收查询字段及其值,以及对数据进行处理。这个方法有三个参数,可以如下调用:

    obj.Build(InputField, InputData, InputQuotes); 

    InputField - 字符串值,包含显示的列。
    InputData - 字符串值包含被使用的数据。
    InputQuotes - 布尔值,表示数据是否应该用引号。

    NoInkSoftware.BuildQuery MyQuery = new NoInkSoftware.BuildQuery();
    MyField 
    = "Name";
    MyData 
    = "John Smith";
    MyQuotes 
    = true;
    MyQuery.Build(MyField, MyData, MyQuotes);

    BuildQuery的FlushAllData 方法是用来清除通过Build存储的所有数据。FlushAllData 将能如下调用:

    obj.FlushAllData()

     例子:

    代码
    NoInkSoftware.BuildQuery MyQuery = new NoInkSoftware.BuildQuery();
    MyQuery.Table 
    = "MyTable";
    MyQuery.Build(MyField, MyData, MyQuotes);
    strQuery 
    = MyQuery.Insert;
    MyQuery.FlushAllData();
    //The object is now ready to work on a different set of data

     BuildQuery 的IDSettings方法将用来设置 UPDATE 或者DELETE 得where条件。基本的IDSettings方法有三个参数,还有一个四个参数的重载。它能被如下调用:

    obj.IDSettings(IDField, IDValue, IDQuotes);

    或者: 

    obj.IDSettings(IDField, IDValue, IDQuotes, IDOperator);

     IDField - 包含了使用列的字符串。
    IDValue - 包含值的字符串。
    IDQuotes - 布尔值,值是否带引号。
    IDOperator - 字符串包含逻辑操作符它将取代默认的'='。

    代码
    NoInkSoftware.BuildQuery MyQuery = new NoInkSoftware.BuildQuery();
    MyField 
    = "Name";
    MyData 
    = "John Smith";
    MyQuotes 
    = true;
    MyOperator 
    = ">=";
    MyQuery.IDSettings(MyField, MyData, MyQuotes, MyOperator);

     BuildQuery 的Insert方法将产生一条准备在数据库中执行的有效地INSERT查询语句。这个方法需要设置Table属性。并至少有一个实例生成方法已被成功调用。Insert能如下使用:

    obj.Insert();

     例子:

    NoInkSoftware.BuildQuery MyQuery = new NoInkSoftware.BuildQuery();
    MyQuery.Table 
    = "MyTable";
    MyQuery.Build(MyField, MyData, MyQuotes);
    String strQuery 
    = MyQuery.Insert();

    BuildQuery的Update方法用来产生一条准备在数据库中执行的有效地 UPDATE查询语句。这个方法需要设置Table属性。对象实例至少成功调用一次IDSettings方法和Build方法各一次。Update方法能如下使用:

    obj.Update();

     例子:

    代码
    NoInkSoftware.BuildQuery MyQuery = new NoInkSoftware.BuildQuery();
    MyQuery.Table 
    = "MyTable";
    MyQuery.IDSettings(
    "MyID", MyValue, false);
    objBuildQuery.Build(MyField, MyData, 
    true);
    String strQuery 
    = MyQuery.Update();

     BuildQuery的Delete方法用于永久删除从在数据库中指定的表的一个或多个行。这个方法需要设置Table属性。对象实例至少成功调用一次IDSettings方法。Delete方法能如下使用:

    obj.Delete();

    这个类有两个属性:Table 和GetIdentity,两个属性都是可读可写的

    Table 属性用来设置BuildQuery类使用的数据表。直到这个属性有值,否者如果产生查询的方法都会返回一个SQl错误

    obj.Table = value;

    例子:

    NoInkSoftware.BuildQuery MyQuery = new NoInkSoftware.BuildQuery();
    MyQuery.Table 
    = "MyTable";

     GetIdentity 属性用来得到和设置产生INSERT 查询语句插入数据之后是否返回一个行的标识种子,这个属性默认是false。

    obj.GetIdentity = true;

     例子:

    NoInkSoftware.BuildQuery MyQuery = new NoInkSoftware.BuildQuery();
    MyQuery.GetIdentity 
    = true;

    参考原文:http://www.codeproject.com/KB/database/buildquery.aspx



    (全文完)


    以下为广告部分

    您部署的HTTPS网站安全吗?

    如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!

    SSL检测评估

    快速了解HTTPS网站安全情况。

    安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。

    SSL证书工具

    安装部署SSL证书变得更方便。

    SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。

    SSL漏洞检测

    让服务器远离SSL证书漏洞侵扰

    TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。

  • 相关阅读:
    【老孙随笔】关羽和吕蒙——天才的失败
    【老孙随笔】项目经理要向唐骏学习
    WebService里奇怪的参数值偏移现象?
    [原创]让您的服务器不再有被挂马的烦恼文件安全卫士
    C#里也可以用上Eval函数了:)
    使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果
    支持算术运算、逻辑运算、位运算的表达式求值
    在Lambda表达式中进行递归调用
    认识Lambda表达式
    将你的QQ唠叨或QQ签名数据加入到博客上:)
  • 原文地址:https://www.cnblogs.com/zhuqil/p/BuildQuery.html
Copyright © 2011-2022 走看看