using System;
using System.Data;
using System.Collections;
using System.Data.SqlServerCe;
namespace SystemDB
{
#region 数据库访问接口
public interface IDataAccess
{
#region 属性
/// <summary>
/// 连接字符串
/// </summary>
string ConnectionString
{
get;
set;
}
#endregion
#region 方法
/// <summary>
/// 打开连接
/// </summary>
void Open();
/// <summary>
/// 关闭连接
/// </summary>
void Close();
/// <summary>
/// 执行命令
/// </summary>
/// <param name="CommandString">命令字符串</param>
/// <param name="Paras">命令所带参数的数组</param>
int ExcuteCommand(string CommandString, IDataParameter[] Paras);
/// <summary>
/// 查询执行命令获取数据记录集
/// </summary>
/// <param name="SelectCommandString">查询命令字符串</param>
/// <param name="TableName">查询表名</param>
/// <param name="Paras">查询命令所带参数的数组</param>
/// <returns>执行查询命令获取的数据记录集</returns>
int GetDataSetFromExcuteCommand(string SelectCommandString, string TableName, IDataParameter[] Paras, ref DataSet ds);
/// <summary>
/// 查询执行命令获取数据记录集用于分页
/// </summary>
/// <param name="SelectCommandString">查询命令字符串</param>
/// <param name="TableName">查询表名</param>
/// <param name="Paras">查询命令所带参数的数组</param>
/// <returns>执行查询命令获取的数据记录集</returns>
int GetDataSetFromExcuteCommandForPageCount(string SelectCommandString, string TableName, IDataParameter[] Paras, ref DataSet ds,int startRecord,int maxRecord);
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="ProcName">存储过程名</param>
/// <param name="Paras">存储过程所带参数的数组</param>
int ExcuteProc(string ProcName, IDataParameter[] Paras);
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="ProcName">存储过程名</param>
/// <param name="Paras">存储过程所带参数的数组</param>
/// <param name="a">返回所影响的行数</param>
/// <returns></returns>
int ExcuteProc(string ProcName, IDataParameter[] Paras, ref int a);
/// <summary>
/// 执行查询存储过程获取数据记录集
/// </summary>
/// <param name="SelectProcName">查询存储过程名</param>
/// <param name="TableName">查询表名</param>
/// <param name="Paras">查询存储过程所带参数的数组</param>
/// <returns>执行查询存储过程获取的数据记录集</returns>
int GetDataSetFromExcuteProc(string SelectProcName, string TableName, IDataParameter[] Paras, ref DataSet ds);
/// <summary>
/// 执行命令获取第一行第一列的值
/// </summary>
/// <param name="CommandString">命令字符串</param>
/// <param name="Paras">命令所带参数的数组</param>
/// <returns>第一行第一列的值</returns>
object ExecuteCommandScalar(string CommandString, IDataParameter[] Paras);
/// <summary>
/// 执行存储过程获取第一行第一列的值
/// </summary>
/// <param name="ProcName">存储过程名</param>
/// <param name="Paras">存储过程所带参数的数组</param>
/// <returns>第一行第一列的值</returns>
object ExecuteProcScalar(string ProcName, IDataParameter[] Paras);
/// <summary>
/// 执行命令获取数据读取器
/// </summary>
/// <param name="SelectCommandString">查询命令字符串</param>
/// <param name="Paras">查询命令所带参数的数组</param>
/// <returns>数据读取器</returns>
int GetDataReaderFromExcuteCommand(string SelectCommandString, IDataParameter[] Paras, ref IDataReader Reader);
/// <summary>
/// 执行存储过程获取数据读取器
/// </summary>
/// <param name="SelectCommandString">查询存储过程名</param>
/// <param name="Paras">查询存储过程所带参数的数组</param>
/// <returns>数据读取器</returns>
int GetDataReaderFromExcuteProc(string SelectProcName, IDataParameter[] Paras, ref IDataReader Reader);
#endregion
}
#endregion
#region SQL Server CE 数据库访问类
public class SqlCeAccess : IDataAccess
{
#region SQL数据库访问构造方法
/// <summary>
/// 无参SQL数据库访问构造方法
/// </summary>
public SqlCeAccess()
{
strConn = "";
conn = new SqlCeConnection();
}
/// <summary>
/// 有参SQL数据库访问构造方法
/// </summary>
/// <param name="ConnectionString">数据库连接字符串</param>
public SqlCeAccess(string ConnectionString)
{
strConn = ConnectionString;
conn = new SqlCeConnection(strConn);
}
#endregion
#region SQL数据库方法类字段
private string strConn; // 数据库连接字符串
private SqlCeConnection conn; // 数据库连接对象
public SqlCeConnection P_conn
{
get
{
return conn;
}
}
private SqlCeTransaction trans;//事物对象
#endregion
#region 命令文本类型枚举
private enum CommandTextType // 命令文本类型
{
Command, // 命令
Procedure // 存储过程
}
#endregion
#region 获取命令对象
/// <summary>
/// 获取命令对象
/// </summary>
/// <param name="CommandText">命令文本</param>
/// <param name="Type">命令文本类型</param>
/// <param name="Paras">命令文本所带参数</param>
/// <returns>命令对象</returns>
private SqlCeCommand GetCommand(string CommandText, CommandTextType Type, IDataParameter[] Paras)
{
SqlCeCommand cmd = new SqlCeCommand(CommandText, conn); // 生成命令对象
switch (Type) // 指定命令类型
{
case CommandTextType.Command:
cmd.CommandType = CommandType.Text;
break;
case CommandTextType.Procedure:
cmd.CommandType = CommandType.StoredProcedure;
break;
}
if (Paras != null) // 为命令添加参数
{
foreach (IDataParameter Para in Paras)
{
cmd.Parameters.Add(Para);
}
}
return cmd;
}
#endregion
#region 执行命令获取第一行第一列的数据
/// <summary>
/// 执行命令获取第一行第一列的数据
/// </summary>
/// <param name="cmd"></param>
/// <returns></returns>
private object GetScalar(SqlCeCommand cmd)
{
object obj = null;
try
{
Open(); // 打开连接
trans = conn.BeginTransaction();
cmd.Transaction = trans;
obj = cmd.ExecuteScalar(); // 执行命令获取第一行第一列数据
trans.Commit();
return obj;
}
catch (Exception exp)
{
trans.Rollback();
return -1;
}
finally
{
Close(); // 关闭连接
}
}
#endregion
#region 获取数据读取器
/// <summary>
/// 获取数据读取器
/// </summary>
/// <param name="cmd">命令对象</param>
/// <returns>数据读取器</returns>
private int GetDataReader(SqlCeCommand cmd, ref IDataReader Reader)
{
try
{
Open(); // 打开连接
//trans = conn.BeginTransaction();
//cmd.Transaction = trans;
Reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); // 获取数据读取器
//trans.Commit();
return 0;
}
catch (Exception exp)
{
//trans.Rollback();
return -1;
}
}
#endregion
#region IDataAccess 成员
#region 数据库连接字符串属性
public string ConnectionString
{
get
{
return strConn;
}
set
{
strConn = value;
conn.ConnectionString = strConn;
}
}
#endregion
#region 打开关闭
public void Open()
{
try
{
if (conn.State != ConnectionState.Open) // 判断数据库连接状态是否打开
{
conn.Open(); // 打开数据库连接
}
}
catch (Exception exp)
{
throw (new Exception("打开数据库连接错误:" + exp.Message));
}
}
public void Close()
{
// TODO: 添加 SqlAccess.Close 实现
try
{
if (conn.State != ConnectionState.Closed) // 判断数据库连接是否关闭
{
conn.Close(); // 关闭数据库连接
}
trans.Dispose();
}
catch (Exception exp)
{
throw (new Exception("关闭数据库连接错误:" + exp.Message));
}
}
#endregion
#region 执行命令
/// <summary>
/// 执行命令
/// </summary>
/// <param name="CommandString">命令字符串</param>
/// <param name="Paras">命令所带参数的数组</param>
public int ExcuteCommand(string CommandString, IDataParameter[] Paras)
{
// TODO: 添加 SqlAccess.ExcuteCommand 实现
SqlCeCommand cmd = GetCommand(CommandString, CommandTextType.Command, Paras); // 获取命令
try
{
Open(); // 打开连接
trans = conn.BeginTransaction(); //建立事物
cmd.Transaction = trans; //记录点
cmd.ExecuteNonQuery(); // 执行命令
trans.Commit(); //提交
return 0;
}
catch (Exception exp)
{
trans.Rollback(); //回滚
return -1;
}
finally
{
Close(); // 关闭连接
}
}
#endregion
#region 查询执行命令获取数据记录集
/// <summary>
/// 查询执行命令获取数据记录集
/// </summary>
/// <param name="SelectCommandString">查询命令字符串</param>
/// <param name="TableName">查询表名</param>
/// <param name="Paras">查询命令所带参数的数组</param>
/// <returns>执行查询命令获取的数据记录集</returns>
public int GetDataSetFromExcuteCommand(string SelectCommandString, string TableName, IDataParameter[] Paras, ref DataSet ds)
{
// TODO: 添加 SqlAccess.GetDataSetFromExcuteCommand 实现
SqlCeCommand cmd = GetCommand(SelectCommandString, CommandTextType.Command, Paras); // 获取命令
try
{
Open();
trans = conn.BeginTransaction();
cmd.Transaction = trans;
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd); // 创建数据适配器
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
//da.FillSchema(ds, SchemaType.Source, TableName);
da.Fill(ds, TableName); // 数据适配器填充数据记录集
trans.Commit();
return 0;
}
catch (Exception exp)
{
trans.Rollback();
return -1;
}
finally
{
Close(); // 关闭连接
}
}
#endregion
#region 查询执行命令获取数据记录集用于分页
/// <summary>
/// 查询执行命令获取数据记录集用于分页
/// </summary>
/// <param name="SelectCommandString">查询命令字符串</param>
/// <param name="TableName">查询表名</param>
/// <param name="Paras">查询命令所带参数的数组</param>
/// <returns>执行查询命令获取的数据记录集</returns>
public int GetDataSetFromExcuteCommandForPageCount(string SelectCommandString, string TableName, IDataParameter[] Paras, ref DataSet ds, int startRecord, int maxRecord)
{
// TODO: 添加 SqlAccess.GetDataSetFromExcuteCommand 实现
SqlCeCommand cmd = GetCommand(SelectCommandString, CommandTextType.Command, Paras); // 获取命令
try
{
Open();
trans = conn.BeginTransaction();
cmd.Transaction = trans;
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd); // 创建数据适配器
da.Fill(ds, startRecord, maxRecord, TableName); // 数据适配器填充数据记录集
trans.Commit();
return 0;
}
catch (Exception exp)
{
trans.Rollback();
return -1;
}
finally
{
Close(); // 关闭连接
}
}
#endregion
#region 执行存储过程
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="ProcName">存储过程名</param>
/// <param name="Paras">存储过程所带参数的数组</param>
public int ExcuteProc(string ProcName, IDataParameter[] Paras)
{
// TODO: 添加 SqlAccess.ExcuteProc 实现
SqlCeCommand cmd = GetCommand(ProcName, CommandTextType.Procedure, Paras); // 获取命令
try
{
Open(); // 打开数据库连接
trans = conn.BeginTransaction();
cmd.Transaction = trans;
cmd.ExecuteNonQuery(); // 执行命令
trans.Commit();
return 0;
}
catch (Exception exp)
{
trans.Rollback();
return -1;
}
finally
{
Close(); // 关闭连接
}
}
#endregion
#region 执行存储过程,返回影响行数
/// <summary>
/// 执行存储过程,返回影响行数
/// </summary>
/// <param name="ProcName">存储过程名</param>
/// <param name="Paras">存储过程所带参数的数组</param>
public int ExcuteProc(string ProcName, IDataParameter[] Paras, ref int a)
{
// TODO: 添加 SqlAccess.ExcuteProc 实现
SqlCeCommand cmd = GetCommand(ProcName, CommandTextType.Procedure, Paras); // 获取命令
try
{
Open(); // 打开数据库连接
trans = conn.BeginTransaction();
cmd.Transaction = trans;
a = cmd.ExecuteNonQuery(); // 执行命令s
trans.Commit();
return 0;
}
catch (Exception exp)
{
trans.Rollback();
return -1;
}
finally
{
Close(); // 关闭连接
}
}
#endregion
#region 执行查询存储过程获取数据记录集
/// <summary>
/// 执行查询存储过程获取数据记录集
/// </summary>
/// <param name="SelectProcName">查询存储过程名</param>
/// <param name="TableName">查询表名</param>
/// <param name="Paras">查询存储过程所带参数的数组</param>
/// <returns>执行查询存储过程获取的数据记录集</returns>
public int GetDataSetFromExcuteProc(string SelectProcName, string TableName, IDataParameter[] Paras, ref DataSet ds)
{
// TODO: 添加 SqlAccess.GetDataSetFromExcuteProc 实现
SqlCeCommand cmd = GetCommand(SelectProcName, CommandTextType.Procedure, Paras); // 获取命令
try
{
Open();
trans = conn.BeginTransaction();
cmd.Transaction = trans;
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd); // 创建数据适配器
da.Fill(ds, TableName); // 数据适配器填充数据记录集
trans.Commit();
return 0;
}
catch (Exception exp)
{
trans.Rollback();
return -1;
}
finally
{
Close(); // 关闭连接
}
}
#endregion
#region 执行命令获取第一行第一列的值
/// <summary>
/// 执行命令获取第一行第一列的值
/// </summary>
/// <param name="CommandString">命令字符串</param>
/// <param name="Paras">命令所带参数的数组</param>
/// <returns>第一行第一列的值</returns>
public object ExecuteCommandScalar(string CommandString, IDataParameter[] Paras)
{
// TODO: 添加 SqlAccess.ExecuteCommandScalar 实现
SqlCeCommand cmd = GetCommand(CommandString, CommandTextType.Command, Paras); // 获取命令
object obj = null;
try
{
obj = GetScalar(cmd); // 获取第一行第一列的值
}
catch (Exception exp)
{
throw (new Exception("执行命令获取第一行第一列的数据错误:" + exp.Message));
}
return obj;
}
#endregion
#region 执行存储过程获取第一行第一列的值
/// <summary>
/// 执行存储过程获取第一行第一列的值
/// </summary>
/// <param name="ProcName">存储过程名</param>
/// <param name="Paras">存储过程所带参数的数组</param>
/// <returns>第一行第一列的值</returns>
public object ExecuteProcScalar(string ProcName, IDataParameter[] Paras)
{
// TODO: 添加 SqlAccess.ExecuteProcScalar 实现
SqlCeCommand cmd = GetCommand(ProcName, CommandTextType.Procedure, Paras); // 获取命令
object obj = null;
try
{
obj = GetScalar(cmd); // 获取第一行第一列的值
}
catch (Exception exp)
{
throw (new Exception("执行存储过程获取第一行第一列的数据错误:" + exp.Message));
}
return obj;
}
#endregion
#region 执行命令获取数据读取器
/// <summary>
/// 执行命令获取数据读取器
/// </summary>
/// <param name="SelectCommandString">查询命令字符串</param>
/// <param name="Paras">查询命令所带参数的数组</param>
/// <returns>数据读取器</returns>
public int GetDataReaderFromExcuteCommand(string SelectCommandString, IDataParameter[] Paras, ref IDataReader Reader)
{
// TODO: 添加 SqlAccess.GetDataReaderFromExcuteCommand 实现
SqlCeCommand cmd = GetCommand(SelectCommandString, CommandTextType.Command, Paras); // 获取命令
try
{
int read = GetDataReader(cmd, ref Reader); // 获取数据读取器
if (read == -1)
{
return -1;
}
return 0;
}
catch (Exception exp)
{
return -1;
}
}
#endregion
#region 执行存储过程获取数据读取器
/// <summary>
/// 执行存储过程获取数据读取器
/// </summary>
/// <param name="SelectCommandString">查询存储过程名</param>
/// <param name="Paras">查询存储过程所带参数的数组</param>
/// <returns>数据读取器</returns>
public int GetDataReaderFromExcuteProc(string SelectProcName, IDataParameter[] Paras, ref IDataReader Reader)
{
// TODO: 添加 SqlAccess.GetDataReaderFromExcuteProc 实现
SqlCeCommand cmd = GetCommand(SelectProcName, CommandTextType.Procedure, Paras); // 获取命令
try
{
int read = GetDataReader(cmd, ref (Reader)); // 获取数据读取器
if (read == -1)
{
return -1;
}
return 0;
}
catch (Exception exp)
{
return -1;
}
}
#endregion
#endregion
}
#endregion
#region 数据库访问类型
public enum AccessDBType
{
SQL,SqlCe
}
#endregion
#region 数据库访问工厂类
public class Factory
{
#region 获取数据库访问对象
/// <summary>
/// 获取数据库访问对象
/// </summary>
/// <param name="Type">数据库访问类型</param>
/// <returns>数据库访问对象</returns>
public static IDataAccess GetDBAccess(AccessDBType Type)
{
IDataAccess DBAccess = null;
switch (Type)
{
case AccessDBType.SqlCe:
DBAccess = new SqlCeAccess();
break;
}
return DBAccess;
}
/// <summary>
/// 获取数据库访问对象
/// </summary>
/// <param name="Type">数据库访问类型</param>
/// <param name="ConnectionString">数据库连接字符串</param>
/// <returns>数据库访问对象</returns>
public static IDataAccess GetDBAccess(AccessDBType Type, string ConnectionString)
{
IDataAccess DBAccess = null;
switch (Type)
{
case AccessDBType.SqlCe:
DBAccess = new SqlCeAccess(ConnectionString);
break;
}
return DBAccess;
}
#endregion
}
#endregion
}
sqlce访问基础类
最新推荐文章于 2019-09-25 11:15:00 发布