📄 smarkdata.cs
字号:
private System.Text.StringBuilder mText = new System.Text.StringBuilder();
public System.Text.StringBuilder Text {
get {
return mText;
}
}
private CommandType mCommandType = CommandType.Text;
public CommandType CommandType {
get {
return mCommandType;
}
set {
mCommandType = value;
}
}
public IDbCommand DbCommand
{
get;
set;
}
private IList<Parameter> mParameters = new List<Parameter>();
protected IList<Parameter> Parameters {
get {
return mParameters;
}
}
public void AddParameter(string name, object value) {
AddParameter(name, value, ParameterDirection.Input);
}
public void AddParameter(Parameter parameter) {
Parameters.Add(parameter);
}
public void AddParameter(string name, object value, ParameterDirection pd) {
Parameter p = new Parameter();
p.Name = name;
p.Value = value;
p.Direction = pd;
Parameters.Add(p);
}
public void ClearParameter() {
Parameters.Clear();
}
public class Parameter {
private string mName;
public string Name {
get {
return mName;
}
set {
mName = value;
}
}
private object mValue;
public object Value {
get {
return mValue;
}
set {
mValue = value;
}
}
private ParameterDirection mDirection = ParameterDirection.Input;
public ParameterDirection Direction {
get {
return mDirection;
}
set {
mDirection = value;
}
}
}
public IDbCommand CreateCommand(IDriver driver) {
IDbCommand cmd = driver.Command;
cmd.CommandText = driver.ReplaceSql(Text.ToString());
cmd.CommandType = CommandType;
DbCommand = cmd;
foreach (Parameter p in Parameters) {
cmd.Parameters.Add(driver.CreateParameter(p.Name, p.Value, p.Direction));
}
return cmd;
}
}
/// <summary>
/// 数据连接句柄对象
/// </summary>
class ConnectionHandler : IDbTransaction, IDisposable {
public ConnectionHandler(IDbConnection connection) {
mConnection = connection;
}
private IDbConnection mConnection;
public IDbConnection Connection {
get {
return mConnection;
}
}
internal IDriver Driver {
get;
set;
}
private IDbTransaction mTransaction;
public IDbTransaction Transaction {
get {
return mTransaction;
}
}
public void BeginTransaction() {
if(Transaction == null)
mTransaction = Connection.BeginTransaction();
}
#region IDisposable 成员
public void Dispose() {
Rollback();
if (mConnection != null)
mConnection.Dispose();
}
#endregion
#region IDbTransaction 成员
public void Commit() {
if (Transaction != null) {
Transaction.Commit();
mTransaction = null;
}
}
public IsolationLevel IsolationLevel {
get { return IsolationLevel.Unspecified; }
}
public void Rollback() {
if (Transaction != null) {
Transaction.Rollback();
mTransaction = null;
}
}
#endregion
private void OnInitCommand(IDbCommand cmd) {
cmd.Connection = Connection;
if(Transaction != null)
cmd.Transaction = Transaction;
}
public int ExecuteNonQuery(Command cmd) {
IDbCommand _execmd = cmd.CreateCommand(Driver);
OnInitCommand(_execmd);
return _execmd.ExecuteNonQuery();
}
public IDataReader ExecuteReader(Command cmd) {
IDbCommand _execmd = cmd.CreateCommand(Driver);
OnInitCommand(_execmd);
return _execmd.ExecuteReader();
}
public object ExecuteScalar(Command cmd) {
IDbCommand _execmd = cmd.CreateCommand(Driver);
OnInitCommand(_execmd);
return _execmd.ExecuteScalar();
}
public DataSet ExecuteDataSet(Command cmd) {
IDbCommand _execmd = cmd.CreateCommand(Driver);
OnInitCommand(_execmd);
IDataAdapter da = Driver.DataAdapter(_execmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
/// <summary>
/// 数据连接上下文对象基于线程存储
/// </summary>
public interface IConnectinContext:IDbTransaction,IDisposable {
void BeginTransaction();
int ExecuteNonQuery(Command cmd);
IDataReader ExecuteReader(Command cmd);
object ExecuteScalar(Command cmd);
DataSet ExecuteDataSet(Command cmd);
IList<T> List<T>(Command cmd, Region region) where T : IEntityState,new();
T ListFirst<T>(Command cmd) where T : IEntityState, new();
T Load<T>(Command cmd) where T : IEntityState, new();
}
class ConnectionContext: IConnectinContext
{
public ConnectionContext(string db,IDriver driver) {
mDB = db;
if (DBContext.CurrentHandler(db) == null) {
DBContext.AddConnectionHandler(mDB,driver);
mActiveConnection = true;
}
mHandler = DBContext.CurrentHandler(mDB);
}
public int ExecuteNonQuery(Command cmd) {
return mHandler.ExecuteNonQuery(cmd);
}
public IDataReader ExecuteReader(Command cmd) {
return mHandler.ExecuteReader(cmd);
}
public object ExecuteScalar(Command cmd) {
return mHandler.ExecuteScalar(cmd);
}
public DataSet ExecuteDataSet(Command cmd) {
return mHandler.ExecuteDataSet(cmd);
}
private string mDB;
private bool mActiveConnection = false;
private bool mActiveTransaction = false;
ConnectionHandler mHandler;
#region IDisposable 成员
public void Dispose() {
if (mActiveTransaction)
mHandler.Rollback();
if (mActiveConnection) {
mHandler.Dispose();
DBContext.RemoveConnetionHandler(mDB);
}
}
#endregion
#region IDbTransaction 成员
public void BeginTransaction() {
if (mHandler.Transaction == null) {
mHandler.BeginTransaction();
mActiveTransaction = true;
}
}
public void Commit() {
if (mActiveTransaction) {
mHandler.Commit();
}
}
public IDbConnection Connection {
get {
return mHandler.Connection;
}
}
public IsolationLevel IsolationLevel {
get { return mHandler.IsolationLevel; }
}
#endregion
#region IDbTransaction 成员
public void Rollback() {
if (mActiveTransaction) {
mHandler.Rollback();
};
}
#endregion
#region IConnectinContext 成员
public IList<T> List<T>(Command cmd, Region region) where T : IEntityState, new() {
if (region == null)
region = new Region { Start = 0, Size = 99999999 };
IList<T> items = new List<T>();
T item;
using (IDataReader reader = ExecuteReader(cmd)) {
int index = 0;
while (reader.Read()) {
if (index >= region.Start) {
item = new T();
item.LoadData(reader);
items.Add(item);
if (items.Count == region.Size)
{
cmd.DbCommand.Cancel();
break;
}
}
index++;
}
}
return items;
}
public T Load<T>(Command cmd) where T : IEntityState, new() {
using (IDataReader reader = ExecuteReader(cmd)) {
if (reader.Read()) {
T t = new T();
t.LoadData(reader);
return t;
}
return default(T);
}
}
#endregion
#region IConnectinContext 成员
public T ListFirst<T>(Command cmd) where T : IEntityState, new()
{
T item=default(T);
using (IDataReader reader = ExecuteReader(cmd))
{
if (reader.Read())
{
item = new T();
item.LoadData(reader);
cmd.DbCommand.Cancel();
return item;
}
}
return item;
}
#endregion
}
/// <summary>
/// 命令执行描述
/// </summary>
public interface ICommandExecute {
void Execute(IConnectinContext cc);
}
/// <summary>
/// 添加数据命令
/// </summary>
public class Insert:ICommandExecute {
private Command mCommand;
public Insert(string table) {
mCommand = new Command("Insert into " + table);
}
private IList<Field> mInserFields = new List<Field>();
public void AddField(string name, object value) {
AddField(name, value, true);
}
public void AddField(string name, object value, bool isparameter) {
Field f = new Field();
f.IsParameter = isparameter;
f.Name = name;
f.Value = value;
mInserFields.Add(f);
}
public void Execute(IConnectinContext cc) {
System.Text.StringBuilder names, values;
names = new System.Text.StringBuilder();
values = new System.Text.StringBuilder();
Field field;
for (int i = 0; i < mInserFields.Count; i++) {
if (i > 0) {
names.Append(",");
values.Append(",");
}
field = (Field)mInserFields[i];
names.Append(field.Name);
if (field.IsParameter) {
values.Append("@" + field.Name);
if (field.Value != null)
mCommand.AddParameter(field.Name, field.Value);
else
mCommand.AddParameter(field.Name, DBNull.Value);
} else
values.Append(field.Value);
}
mCommand.Text.Append("(" + names + ")" + " Values(" + values + ")");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -