金思通DNSPod管理助手

      之前由于工作需要,需要用到DNSPod解析大量域名,手动解析太过于麻烦,作为程序员肯定想法子偷懒,并且提高工作效率,于是便开始研究了下DNSPod提供的API,自己开发了一个DNSPod管理助手,实现域名快速解析。

 SQLiteHelper

using System;
using System.Collections;
using System.Data.SQLite;
using System.Data;
using System.Configuration;

namespace KingSystem.DNSPod
{
    /// <summary>
    /// SQLite数据库的数据连接层
    /// </summary>
    public abstract class SQLiteHelper
    {
        /// <summary>
        /// 从App.config获取数据库连接字符串
        /// </summary>
        private static readonly String StrConn = ConfigurationManager.AppSettings["SQLiteConnection"];

        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public static String ConnectionStringManager
        {
            get { return StrConn; }
        }

        /// <summary>
        /// Hashtable把参数保存到缓存中
        /// </summary>
        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

        /// <summary>
        /// Command预设置
        /// </summary>
        /// <param name="cmd">SQLiteCommand对象</param>
        /// <param name="conn">SQLiteConnection对象</param>
        /// <param name="trans">SQLiteTransaction对象,可为null</param>
        /// <param name="cmdType">CommandType,存储过程或命令行</param>
        /// <param name="cmdText">SQL语句或存储过程名</param>
        /// <param name="cmdParms">SQLiteCommand参数数组,可为null</param>
        private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, SQLiteTransaction trans, CommandType cmdType, String cmdText, SQLiteParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();

            cmd.Connection = conn;
            cmd.CommandText = cmdText;

            if (trans != null)
                cmd.Transaction = trans;

            cmd.CommandType = cmdType;

            if (cmdParms != null)
                foreach (SQLiteParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
        }

        #region ExecuteNonQuery执行一个没有返回结果的SQL语句
        /// <summary>
        /// 执行一个没有返回结果的SQL语句
        /// </summary>
        /// <param name="connStr">数据库连接字符串</param>
        /// <param name="cmdType">命令类型(存储过程或SQL语句)</param>
        /// <param name="cmdText">SQL语句或存储过程名</param>
        /// <param name="cmdParms">SQLiteCommand参数数组</param>
        /// <returns>返回受引响的记录行数</returns>
        public static int ExecuteNonQuery(String connStr, CommandType cmdType, String cmdText, params SQLiteParameter[] cmdParms)
        {
            using (SQLiteCommand cmd = new SQLiteCommand())
            {
                using (SQLiteConnection conn = new SQLiteConnection(connStr))
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
                    int val = cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                    return val;
                }
            }
        }

        /// <summary>
        /// 执行一个没有返回结果的SQL语句
        /// </summary>
        /// <param name="trans">SQLiteTransaction对象</param>
        /// <param name="cmdType">命令类型(存储过程或SQL语句)</param>
        /// <param name="cmdText">SQL语句或存储过程名</param>
        /// <param name="cmdParms">SQLiteCommand参数数组</param>
        /// <returns>返回受引响的记录行数</returns>
        public static int ExecuteNonQuery(SQLiteTransaction trans, CommandType cmdType, String cmdText, params SQLiteParameter[] cmdParms)
        {
            using (SQLiteCommand cmd = new SQLiteCommand())
            {
                PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }

        /// <summary>
        /// 执行一个没有返回结果的SQL语句
        /// </summary>
        /// <param name="conn">Connection对象</param>
        /// <param name="cmdType">命令类型(存储过程或SQL语句)</param>
        /// <param name="cmdText">SQL语句或存储过程名</param>
        /// <param name="cmdParms">SQLiteCommand参数数组</param>
        /// <returns>返回受引响的记录行数</returns>
        public static int ExecuteNonQuery(SQLiteConnection conn, CommandType cmdType, String cmdText, params SQLiteParameter[] cmdParms)
        {
            using (SQLiteCommand cmd = new SQLiteCommand())
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }
        #endregion

        /// <summary>
        /// 执行命令或存储过程,返回一个SQLiteDataReader,只读的数据集
        /// 注意SQLiteDataReader对象使用完后必须Close以释放SQLiteConnection资源
        /// </summary>
        /// <param name="connStr">>数据库连接字符串</param>
        /// <param name="cmdType">命令类型(存储过程或SQL语句)</param>
        /// <param name="cmdText">SQL语句或存储过程名</param>
        /// <param name="cmdParms">Parameter参数数组</param>
        /// <returns>成功则返回一个SQLiteDataReader,只读的数据集,否则抛出异常</returns>
        public static SQLiteDataReader ExecuteReader(String connStr, CommandType cmdType, String cmdText, params SQLiteParameter[] cmdParms)
        {
            SQLiteCommand cmd = new SQLiteCommand();
            SQLiteConnection conn = new SQLiteConnection(connStr);
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
                SQLiteDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;
            }
            catch (Exception ex)
            {
                conn.Close();
                throw ex;
            }
        }

        #region ExecuteScalar执行命令,返回第一行第一列的值
        /// <summary>
        /// 执行只返回第一行第一列的值的SQL语句
        /// </summary>
        /// <param name="connStr">数据库连接字符串</param>
        /// <param name="cmdType">命令类型(存储过程或SQL语句)</param>
        /// <param name="cmdText">SQL语句或存储过程名</param>
        /// <param name="cmdParms">Parameter参数数组</param>
        /// <returns>返回第一行第一列的值</returns>
        public static object ExecuteScalar(String connStr, CommandType cmdType, String cmdText, params SQLiteParameter[] cmdParms)
        {
            using (SQLiteCommand cmd = new SQLiteCommand())
            {
                using (SQLiteConnection connection = new SQLiteConnection(connStr))
                {
                    PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);
                    object val = cmd.ExecuteScalar();
                    cmd.Parameters.Clear();
                    return val;
                }
            }
        }

        /// <summary>
        /// 执行只返回第一行第一列的值的SQL语句
        /// </summary>
        /// <param name="conn">Connection对象</param>
        /// <param name="cmdType">命令类型(存储过程或SQL语句)</param>
        /// <param name="cmdText">SQL语句或存储过程名</param>
        /// <param name="cmdParms">SQLiteCommand参数数组</param>
        /// <returns>返回第一行第一列的值</returns>
        public static object ExecuteScalar(SQLiteConnection conn, CommandType cmdType, String cmdText, params SQLiteParameter[] cmdParms)
        {
            using (SQLiteCommand cmd = new SQLiteCommand())
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
                object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return val;
            }
        }
        #endregion

        /// <summary>
        /// 将参数数组添加到缓存
        /// </summary>
        /// <param name="cacheKey">键值</param>
        /// <param name="cmdParms">参数数组</param>
        public static void CacheParameters(String cacheKey, params SQLiteParameter[] cmdParms)
        {
            parmCache[cacheKey] = cmdParms;
        }

        /// <summary>
        /// 根据键值获取相应的参数数组
        /// </summary>
        /// <param name="cacheKey">键值</param>
        /// <returns>返回参数数组</returns>
        public static SQLiteParameter[] GetCachedParameters(String cacheKey)
        {
            SQLiteParameter[] cachedParms = (SQLiteParameter[])parmCache[cacheKey];
            if (cachedParms == null)
                return null;
            SQLiteParameter[] clonedParms = new SQLiteParameter[cachedParms.Length];
            for (int i = 0, j = cachedParms.Length; i < j; i++)
                clonedParms[i] = (SQLiteParameter)((ICloneable)cachedParms[i]).Clone();
            return clonedParms;
        }
    }
}

  

稍后公布技术细节,这篇随笔先显示下程序效果图

posted @ 2014-02-11 11:33  老板办卡吗  阅读(171)  评论(0)    收藏  举报