📄 sqlclientworkflowstore.cs
字号:
using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using DotNetTools.Util;
namespace DotNetTools.Workflow.Spi.Ado
{
/// <summary>
///
/// </summary>
/// <author>jjx</author>
public class SqlClientWorkflowStore : AdoWorkflowStore
{
public SqlClientWorkflowStore(IDictionary props):base(props)
{
}
protected override IDbConnection Connection
{
get
{
closeConnWhenDone = true;
SqlConnection conn=new SqlConnection(this.connectionString);
conn.Open();
return conn;
}
}
protected override String getParameterName(String parameterName)
{
return "@" + parameterName;
}
protected override IDbCommand createDbCommand(IDbConnection connection, String sql)
{
IDbCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
return cmd;
}
protected override IDataParameter createDataParameter(String name, Object value)
{
return new SqlParameter(getParameterName(name), value==null?DBNull.Value:value);
}
public override IWorkflowEntry CreateEntry(String workflowName)
{
IDbConnection conn = null;
IDbCommand stmt = null;
try
{
conn = Connection;
String sql = "INSERT INTO " + entryTable + " (" + entryName + ", " + entryState + ") VALUES (" +
getParameterName(entryName) + "," +
getParameterName(entryState) + ");select "+getParameterName(entryId)+"=scope_identity();";
if (log.IsDebugEnabled)
{
log.Debug("Executing SQL statement: " + sql);
}
stmt = createDbCommand(conn, sql);
IDataParameter entryIdParameter=createDataParameter(entryId, 0);
entryIdParameter.Direction=ParameterDirection.InputOutput;
stmt.Parameters.Add(entryIdParameter);
stmt.Parameters.Add(createDataParameter(entryName, workflowName));
stmt.Parameters.Add(createDataParameter(entryState, SimpleWorkflowEntry.CREATED));
stmt.ExecuteNonQuery();
long id=TextUtils.ParseLong(entryIdParameter.Value.ToString());
return new SimpleWorkflowEntry(id, workflowName, SimpleWorkflowEntry.CREATED);
}
catch (Exception e)
{
throw new StoreException("Error creating new workflow instance", e);
}
finally
{
cleanup(conn, stmt, null);
}
}
protected internal override long createCurrentStep(IDbConnection conn, long entryId, int wfStepId, String owner, DateTime startDate, DateTime dueDate, String status)
{
String sql = "INSERT INTO " + currentTable + " (" + stepEntryId + ", " +
stepStepId + ", " + stepActionId + ", " + stepOwner + ", " + stepStartDate + ", " + stepDueDate + ", " +
stepFinishDate + ", " + stepStatus + ", " + stepCaller + " ) VALUES (" +
getParameterName(stepEntryId) + "," +
getParameterName(stepStepId) + "," +
getParameterName(stepActionId)+"," +
getParameterName(stepOwner) + "," +
getParameterName(stepStartDate) +","+
getParameterName(stepDueDate) +","+
getParameterName(stepFinishDate)+","+
getParameterName(stepStatus) +","+
"null);select "+getParameterName(stepId)+"=scope_identity()";
if (log.IsDebugEnabled)
{
log.Debug("Executing SQL statement: " + sql);
}
IDbCommand stmt = createDbCommand(conn, sql);
IDataParameter stepIdParameter=createDataParameter(stepId,0);
stepIdParameter.Direction=ParameterDirection.InputOutput;
stmt.Parameters.Add(stepIdParameter);
stmt.Parameters.Add(createDataParameter(stepEntryId, entryId));
stmt.Parameters.Add(createDataParameter(stepStepId, wfStepId));
stmt.Parameters.Add(createDataParameter(stepActionId,0));
stmt.Parameters.Add(createDataParameter(stepOwner, owner));
stmt.Parameters.Add(createDataParameter(stepStartDate, startDate));
stmt.Parameters.Add(createDataParameter(stepDueDate, dueDate));
stmt.Parameters.Add(createDataParameter(stepFinishDate,DateTime.MaxValue));
stmt.Parameters.Add(createDataParameter(stepStatus, status));
stmt.ExecuteNonQuery();
long id=TextUtils.ParseLong(stepIdParameter.Value.ToString());
cleanup(null, stmt, null);
return id;
}
public SqlClientWorkflowStore()
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -