using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Xml;
using UtilityConsole;
namespace DBAccess
{
public enum DBOperation { ADD, UPDATE };
public class BaseOperation
{
//连接字符串
private string _connStr = string.Empty;
public string ErrorInfo = string.Empty;
protected string strTmp;
protected StringBuilder sbMutilProcessSqlString;
protected StringBuilder sb;
protected int i;
protected ReadDataFromDataReader mMyReadDataFromDataReader;
protected DataTable dtTable;
protected List<DBOperation> ActionList;
public string ConnStr
{
get { return _connStr; }
set { _connStr = value; }
}
protected BaseOperation()
{
_connStr = ConfigurationManager.AppSettings["connection"];
DBHelper.Instance.ConnectionStr = _connStr;
sb = new StringBuilder();
sbMutilProcessSqlString = new StringBuilder();
mMyReadDataFromDataReader = new ReadDataFromDataReader(BaseReadDataFromDataReader);
ActionList = new List<DBOperation>();
}
/// <summary>
/// 开始多任务操作
/// </summary>
public void StartMultiOperation()
{
ActionList.Clear();
sbMutilProcessSqlString.Remove(0, sbMutilProcessSqlString.Length);
}
/// <summary>
/// 添加动作
/// </summary>
/// <param name="dbo">具体动作</param>
protected void AddAction(List<string> paramValues, string tableName, string[] _nameString, string[] _nameStringType, DBOperation dbo)
{
if (dbo == DBOperation.ADD)
{
strTmp = BaseCreateInsertSqlString(paramValues, tableName, _nameString, _nameStringType);
if (strTmp != null && strTmp.Trim().Length > 0)
{
sbMutilProcessSqlString.Append(strTmp);
sbMutilProcessSqlString.Append("\r\n");
}
}
else if (dbo == DBOperation.UPDATE)
{
strTmp = BaseCreateUpdateSqlString(paramValues, tableName, _nameString, _nameStringType);
if (strTmp != null && strTmp.Trim().Length > 0)
{
sbMutilProcessSqlString.Append(strTmp);
sbMutilProcessSqlString.Append("\r\n");
}
}
}
/// <summary>
/// 执行多步操作
/// </summary>
/// <returns>影响的行数,失败返回-1</returns>
public int ExecuteMultiOperation()
{
strTmp = sbMutilProcessSqlString.ToString().Trim();
if (strTmp != null && strTmp.Length > 0)
{
return DBHelper.Instance.ExecuteSqlStatementTrans(sbMutilProcessSqlString.ToString());
}
else
{
return -1;
}
}
/// <summary>
/// SqlCommand方法执行更新、删除
/// </summary>
/// <param name="sqlStr">sqlStr执行语句</param>
/// <returns></returns>
protected int SqlExecutive(string sqlStr)
{
return DBHelper.Instance.ExecuteSqlStatement(sqlStr);
}
/// <summary>
/// 是否存在
/// </summary>
/// <param name="strSql">sql语句</param>
/// <returns>判断是否存在</returns>
protected bool BaseExists(string strSql)
{
return DBHelper.Instance.Exists(strSql);
}
/// <summary>
/// 生成插入语句
/// </summary>
/// <param name="paramValues">参数值</param>
/// <param name="tableName">数据表名</param>
/// <param name="_nameString">字段名</param>
/// <param name="_nameStringType">字段类型</param>
/// <returns>生成的插入语句</returns>
protected string BaseCreateInsertSqlString(List<string> paramValues, string tableName, string[] _nameString, string[] _nameStringType)
{
sb.Remove(0, sb.Length);
if (paramValues.Count != _nameString.Length)
{
return null;
}
sb.Append(string.Format("INSERT INTO [{0}] ", tableName));
//ok
for (i = 1; i < _nameString.Length; i++)
{
if (i == 1)
{
sb.Append(string.Format("({0}", _nameString[i]));
}
else
{
sb.Append(string.Format(",{0}", _nameString[i]));
}
}
sb.Append(") VALUES (");
//not ok
for (i = 1; i < _nameString.Length; i++)
{
if (_nameStringType[i] == "int" || _nameStringType[i] == "float")
{
if (paramValues[i].Trim() == "")
{
paramValues[i] = "0";
}
sb.Append(string.Format("{0},", paramValues[i]));
}
else
{
sb.Append(string.Format("'{0}',", paramValues[i]));
}
}
if (i != 1)
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append(")");
return sb.ToString();
}
//基本的插入
protected int BaseInsertItem(List<string> paramValues, string tableName, string[] _nameString, string[] _nameStringType)
{
return SqlExecutive(BaseCreateInsertSqlString(paramValues, tableName, _nameString, _nameStringType));
}
/// <summary>
/// 删除操作
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="strWhere">where子句</param>
/// <returns>返回的结果</returns>
protected int BaseDelete(string tableName,string strWhere)
{
sb.Remove(0, sb.Length);
sb.Append(string.Format("delete from {0}", tableName));
if (strWhere != null && strWhere.Length > 0)
{
sb.Append(string.Format(" where {0}", strWhere));
}
return SqlExecutive(sb.ToString());
}
/// <summary>
/// 添加更新语句
/// </summary>
/// <param name="paramValues">值</param>
/// <param name="tableName">数据库表</param>
/// <param name="_nameString">字段</param>
/// <param name="_nameStringType">字段类型</param>
/// <returns></returns>
protected string BaseCreateUpdateSqlString(List<string> paramValues, string tableName, string[] _nameString, string[] _nameStringType)
{
sb.Remove(0, sb.Length);
if (paramValues.Count != _nameString.Length)
{
return null;
}
sb.Append(string.Format("update [{0}] set ", tableName));
for (i = 1; i <= _nameString.Length - 1; i++)
{
if (_nameStringType[i] == "int" || _nameStringType[i] == "float")
{
if (paramValues[i].Trim() == "")
{
paramValues[i] = "0";
}
sb.Append(string.Format("{0} = {1},", _nameString[i], paramValues[i]));
}
else
{
sb.Append(string.Format("{0} = '{1}',", _nameString[i], paramValues[i]));
}
}
if (i != 1)
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append(string.Format(" where {0} = {1}", _nameString[0], paramValues[0]));
return sb.ToString();
}
/// <summary>
/// 更新函数
/// </summary>
protected int BaseUpdateItem(List<string> paramValues, string tableName, string[] _nameString, string[] _nameStringType)
{
return this.SqlExecutive(BaseCreateUpdateSqlString(paramValues, tableName, _nameString, _nameStringType));
}
/// <summary>
/// 创造内存表结构
/// </summary>
/// <param name="colNames">类名</param>
/// <returns>带结构的表</returns>
protected DataTable GetDataTableSchema(string[] colNames)
{
DataTable dtTmp;
DataColumn dcColumn;
dtTmp = null;
if (colNames != null && colNames.Length > 0)
{
dtTmp = new DataTable();
for (i = 0; i < colNames.Length; ++i)
{
dcColumn = new DataColumn(colNames[i]);
dtTmp.Columns.Add(dcColumn);
}
}
return dtTmp;
}
/// <summary>
/// 读取数据
/// </summary>
/// <param name="reader">数据集</param>
protected void BaseReadDataFromDataReader(SqlDataReader reader)
{
if (reader.HasRows)
{
if (dtTable != null && dtTable.Columns.Count > 0)
{
DataRow NewRow;
string strColName;
int ColCount;
while (reader.Read())
{
NewRow = dtTable.NewRow();
ColCount = dtTable.Columns.Count;
for (i = 0; i < dtTable.Columns.Count; ++i)
{
strColName = dtTable.Columns[i].ColumnName;
NewRow[strColName] = reader[strColName];
}
dtTable.Rows.Add(NewRow);
}
}
}
}
/// <summary>
/// 查询语句
/// </summary>
/// <param name="tableName">表的名字</param>
/// <param name="_nameString">列名</param>
/// <param name="strWhere">子查询</param>
/// <returns>返回的数据列</returns>
protected DataTable BaseSelectItem(string tableName, string[] _nameString, string strWhere)
{
sb.Remove(0, sb.Length);
sb.Append(string.Format("select * from [{0}]", tableName));
if (strWhere != null && strWhere.Length > 0)
{
sb.Append(string.Format(" where {0}", strWhere));
}
dtTable = GetDataTableSchema(_nameString); //创造带结构的表
if (DBHelper.Instance.ExecuteSqlStatement(sb.ToString(), mMyReadDataFromDataReader))
{
return dtTable;
}
return null;
}
protected int BaseGetMaxId(string strSql)
{
return int.Parse(DBHelper.Instance.SelectDB(strSql).Rows[0][0].ToString());
}
}
}
该类主要将底层的类进行封装,实现了增删改和批量的事务操作
数据库的逻辑层类,用一个基类进行实现
最新推荐文章于 2024-09-23 14:16:45 发布