TableBase
/**
* 所有单个表的添加,修改,删除,查询操作的类
*/
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
namespace SysUtility
{
/// <summary>
/// 所有单个表的添加,修改,删除,查询操作。
/// 该类封装所有这些操作。
/// 所有的单个表的操作都可以通过该类来完成。
/// 该类的每一个公有方法都有可能抛出SqlException。
/// <remarks>
/// 该类的目标是当表的结构发生变化时该类无需变化。
/// </remarks>
/// </summary>
public sealed class TableBase
{
#region Private
/// <summary>
/// 数据库连接字符串
/// </summary>
private string sqlConnString;
/// <summary>
/// 要处理的表名
/// </summary>
private string tableName;
#endregion
#region Constructors
/// <summary>
/// 构造函数,初始化TableBase类的新实例。
/// </summary>
/// <param name="talbeName">数据库表名</param>
/// <param name="connString">数据库连接字符串</param>
public TableBase(string talbeName, string connString)
{
this.tableName = talbeName;
this.sqlConnString = connString;
}
#endregion
#region INSERT 该函数向表中插入一条记录
/// <summary>
/// 该函数向数据库表中插入一条记录。
/// 要插入的数据为一个哈希表。
/// 其中:哈希表中的每一个键值为数据库表中的对应的列名,键所对应的对象即为列对应的值。
/// 该函数处理的SQL语句类型为:INSERT INTO TableName (columnList) VALUES (parameterList)
/// </summary>
/// <param name="data">要插入的数据</param>
/// <returns>返回受影响的行数</returns>
public int Insert(Hashtable data)
{
if(data==null && data==new Hashtable())
{
throw new Exception("无插入数据!");
}
int cnts = -1;
// 创建到数据库的连接以及数据库命令
SqlConnection sqlConn = new SqlConnection(sqlConnString);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.Text;
// 创建插入命令SQL语句所需的列名列表和参数列表,设置每个参数的名字和值
string columnList = "";
string parameterList = "";
string parameterName = "";
foreach (string columnName in data.Keys)
{
parameterName = "@" + columnName.Replace("[","").Replace("]","");
columnList += columnName + ",";
parameterList += parameterName + ",";
sqlCmd.Parameters.Add(parameterName, data[columnName]);
}
// 去除列名列表和参数列表中最后的逗号字符
columnList = columnList.Substring(0, columnList.Length - 1);
parameterList = parameterList.Substring(0, parameterList.Length - 1);
// 组装完整的插入命令SQL语句,设置命令对象的文本属性
string insertSql = "INSERT INTO " + tableName + "(" + columnList + ") VALUES (" + parameterList + ")";
sqlCmd.CommandText = insertSql;
// 打开连接并执行数据库命令
try
{
sqlConn.Open();
cnts = sqlCmd.ExecuteNonQuery();
}
catch(Exception ex)
{
throw new Exception("插入数据不成功!\r\n"+ex.Message);
}
finally
{
if(sqlConn!=null)
{
sqlConn.Close();
sqlConn.Dispose();
}
}
return cnts;
}
#endregion
#region UPDATE 该函数修改表中满足搜索条件的所有记录
/// <summary>
/// 该函数修改表中满足搜索条件的所有记录。
/// 搜索条件为一个哈希表。
/// 其中:哈希表中的每一个键值为数据库表中的列名,键所对应的对象即为列对应的值。
/// 要修改的数据为一个哈希表。
/// 其中:哈希表中的每一个键值为数据库表中的列名,键所对应的对象即为列对应的值。
/// 该函数处理的SQL语句类型为:UPDATE Tablename SET updateList WHERE searchCondition
/// </summary>
/// <param name="data">修改后的数据</param>
/// <param name="searchCondition">搜索条件</param>
/// <returns>返回受影响的行数</returns>
public int Update(Hashtable data, Hashtable searchCondition)
{
int cnts = -1;
// 创建到数据库的连接以及数据库命令,设置命令类型为SQL文本命令
SqlConnection sqlConn = new SqlConnection(sqlConnString);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.Text;
// 创建更新命令SQL语句中的更新列表子句,设置每一个参数的名字和值
string updateList = "";
string parameterName = "";
foreach (string columnName in data.Keys)
{
parameterName = "@" + columnName.Replace("[","").Replace("]","");
updateList += columnName + "=" + parameterName + ",";
sqlCmd.Parameters.Add(parameterName, data[columnName]);
}
if(updateList.Equals(""))
{
return cnts;
}
// 去除更新列表子句中最后的逗号
updateList = updateList.Substring(0, updateList.Length - 1);
// 创建条件子句,设置参数的名字和值
string condition = "";
foreach (string columnName in searchCondition.Keys)
{
// 条件中的列名可能和更新列表中的列名重复,因此构造一个新的参数名
parameterName = "@New" + columnName.Replace("[","").Replace("]","");
condition += columnName + "=" + parameterName + " AND ";
sqlCmd.Parameters.Add(parameterName, searchCondition[columnName]);
}
if(condition!="")
{
// 去除条件子句最后的" AND "子串
condition = condition.Substring(0, condition.Length - 5);
condition =" WHERE "+condition;
}
// 组装完整的更新命令SQL语句并设置数据库命令的属性
string updateSql = "UPDATE " + tableName + " SET " + updateList + condition;
sqlCmd.CommandText = updateSql;
// 打开到数据库的连接并执行命令
try
{
sqlConn.Open();
cnts = sqlCmd.ExecuteNonQuery();
}
catch(Exception ex)
{
throw new Exception("修改数据不成功!\r\n"+ex.Message);
}
finally
{
if(sqlConn!=null)
{
sqlConn.Close();
sqlConn.Dispose();
}
}
return cnts;
}
#endregion
#region DELETE 该函数从表中删除所有满足搜索条件的记录
/// <summary>
/// 该函数从表中删除所有满足搜索条件的记录。
/// 搜索条件为一个哈希表。
/// 其中:哈希表中的每一个键值为数据库表中的对应的列名,键所对应的对象即为列对应的值。
/// 该函数处理的SQL语句类型为:DELETE Tablename WHERE searchCondition
/// </summary>
/// <param name="searchCondition">搜索条件</param>
/// <returns>返回受影响的行数</returns>
public int Delete(Hashtable searchCondition)
{
int cnts = -1;
// 创建到数据库的连接以及数据库命令,设置命令类型为SQL文本命令
SqlConnection sqlConn = new SqlConnection(sqlConnString);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.Text;
// 创建条件子句,设置参数的名字和值
string condition = "1=1 AND ";;
string parameterName = "";
if(searchCondition!=null)
{
foreach (string columnName in searchCondition.Keys)
{
parameterName = "@" + columnName.Replace("[","").Replace("]","");
condition += columnName + "=" + parameterName + " AND ";
sqlCmd.Parameters.Add(parameterName, searchCondition[columnName]);
}
}
// 去除条件子句最后的" AND "子串
condition = condition.Substring(0, condition.Length - 5);
// 组装完整的删除命令SQL语句并设置命令的文本属性
string deleteSql = "DELETE " + tableName + " WHERE " + condition;
sqlCmd.CommandText = deleteSql;
// 打开到数据库的连接并执行命令
try
{
sqlConn.Open();
cnts = sqlCmd.ExecuteNonQuery();
}
catch(Exception ex)
{
throw new Exception("删除数据不成功!\r\n"+ex.Message);
}
finally
{
if(sqlConn!=null)
{
sqlConn.Close();
sqlConn.Dispose();
}
}
return cnts;
}
#endregion
#region SELECT 该函数选择数据库记录
/// <summary>
/// 该函数选择满足条件的数据库记录。
/// 搜索条件为一个哈希表。
/// 其中:哈希表中的每一个键值为数据库表中的对应的列名,键所对应的对象即为列对应的值。
/// 该函数处理的SQL语句类型为:SELECT * FROM TableName WHERE searchCondition
/// </summary>
/// <param name="data">搜索条件</param>
/// <returns>返回结果集</returns>
public DataTable Select(Hashtable searchCondition)
{
// 创建到数据库的连接以及数据库命令
SqlConnection sqlConn = new SqlConnection(sqlConnString);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.Text;
// 创建条件子句,设置参数的名字和值
string condition = "1=1 AND ";
if(searchCondition!=null)
{
string parameterName = "";
foreach (string columnName in searchCondition.Keys)
{
parameterName = "@" + columnName.Replace("[","").Replace("]","");
condition += columnName + "=" + parameterName + " AND ";
sqlCmd.Parameters.Add(parameterName, searchCondition[columnName]);
}
}
// 去除条件子句最后的" AND "子串
condition = condition.Substring(0, condition.Length - 5);
// 组装完整的删除命令SQL语句并设置命令的文本属性
string selectSql = "SELECT * FROM " + tableName + " WHERE " + condition;
sqlCmd.CommandText = selectSql;
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = sqlCmd;
// 打开连接并执行数据库命令
try
{
adapter.Fill(ds);
}
catch(Exception ex)
{
throw new Exception("选择数据不成功!\r\n"+ex.Message);
}
return ds.Tables[0];
}
/// <summary>
/// 该函数选择满足条件的数据库记录。
/// 搜索条件为一个哈希表。
/// 其中:哈希表中的每一个键值为数据库表中的对应的列名,键所对应的对象即为列对应的值。
/// 该函数处理的SQL语句类型为:SELECT colName FROM TableName WHERE searchCondition
/// </summary>
/// <param name="colName">列名</param>
/// <param name="data">搜索条件</param>
/// <returns>返回对象列表,如果没有符合条件的数据则返回null。</returns>
public ArrayList Select(string[] colName, Hashtable searchCondition)
{
ArrayList obj = null;
// 创建到数据库的连接以及数据库命令
SqlConnection sqlConn = new SqlConnection(sqlConnString);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.Text;
// 创建条件子句,设置参数的名字和值
string condition = "1=1 AND ";
if(searchCondition!=null)
{
string parameterName = "";
foreach (string columnName in searchCondition.Keys)
{
parameterName = "@" + columnName.Replace("[","").Replace("]","");
condition += columnName + "=" + parameterName + " AND ";
sqlCmd.Parameters.Add(parameterName, searchCondition[columnName]);
}
}
// 去除条件子句最后的" AND "子串
condition = condition.Substring(0, condition.Length - 5);
string colNameList = "";
for(int i=0;i<colName.Length;i++)
{
colNameList += colName[i]+",";
}
colNameList = colNameList.Substring(0, colNameList.Length - 1);
// 组装完整的删除命令SQL语句并设置命令的文本属性
string selectSql = "SELECT " + colNameList + " FROM " + tableName + " WHERE " + condition;
sqlCmd.CommandText = selectSql;
SqlDataReader dreader = null;
// 打开连接并执行数据库命令
try
{
sqlConn.Open();
dreader = sqlCmd.ExecuteReader();
if(dreader.Read())
{
obj = new ArrayList();
for(int i=0;i<colName.Length;i++)
{
obj.Add(dreader[i]);
}
}
}
catch(Exception ex)
{
throw new Exception("选择数据不成功!\r\n"+ex.Message);
}
finally
{
if(sqlConn!=null)
{
if(dreader!=null) dreader.Close();
sqlConn.Close();
sqlConn.Dispose();
}
}
return obj;
}
#endregion
}
}
浙公网安备 33010602011771号