金思通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;
}
}
}
稍后公布技术细节,这篇随笔先显示下程序效果图

浙公网安备 33010602011771号