在[设想篇]中,提到的一些属性,在本篇中进行实现
[NXDataSet("SPName",SchemaFlag.IsStoredProcedure)]
NXDataSet为一个属性,标识存储过程的名称,SchemaFlag为枚举,可以你希望他还有IsTable,IsView这样的数据,用于其它结构的枚举
实现代码:
/**/
/// <summary>
/// 类表示实体的数据结构样式属性的标签
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class NXDataSetAttribute : System.Attribute
... {
/**//// <summary>
/// 初始化[描述表或视图]属性类实例
/// </summary>
/// <param name="ClassName">类的名称</param>
/// <param name="schemaFlag">结构标识</param>
public NXDataSetAttribute(string ClassName,SchemaFlag schemaFlag)
...{
this.ClassName = ClassName;
this.Schema = schemaFlag;
}
/**//// <summary>
/// 初始化[描述表]属性类实例
/// </summary>
/// <param name="ClassName">类的名称</param>
public NXDataSetAttribute(string ClassName) : this(ClassName,SchemaFlag.IsTable)...{}
private string _ClassName;
/**//// <summary>
/// 类的名称 [表示为:表名,视图名,存储过程名称]
/// </summary>
public string ClassName
...{
get...{return this._ClassName;}
set...{this._ClassName =value;}
}
private SchemaFlag _schemaFlag;
/**//// <summary>
/// 类的实体样式 [表,视图,存储过程]
/// </summary>
public SchemaFlag Schema
...{
get...{return this._schemaFlag;}
set...{this._schemaFlag = value;}
}
}
/// 类表示实体的数据结构样式属性的标签
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class NXDataSetAttribute : System.Attribute
... {
/**//// <summary>
/// 初始化[描述表或视图]属性类实例
/// </summary>
/// <param name="ClassName">类的名称</param>
/// <param name="schemaFlag">结构标识</param>
public NXDataSetAttribute(string ClassName,SchemaFlag schemaFlag)
...{
this.ClassName = ClassName;
this.Schema = schemaFlag;
}
/**//// <summary>
/// 初始化[描述表]属性类实例
/// </summary>
/// <param name="ClassName">类的名称</param>
public NXDataSetAttribute(string ClassName) : this(ClassName,SchemaFlag.IsTable)...{}
private string _ClassName;
/**//// <summary>
/// 类的名称 [表示为:表名,视图名,存储过程名称]
/// </summary>
public string ClassName
...{
get...{return this._ClassName;}
set...{this._ClassName =value;}
}
private SchemaFlag _schemaFlag;
/**//// <summary>
/// 类的实体样式 [表,视图,存储过程]
/// </summary>
public SchemaFlag Schema
...{
get...{return this._schemaFlag;}
set...{this._schemaFlag = value;}
}
}
其中使用枚举SchemaFlag代码如下
public
enum
SchemaFlag :
int
... {
/**//// <summary>
/// 表
/// </summary>
IsTable = 0,
/**//// <summary>
/// 视图
/// </summary>
IsView = 1,
/**//// <summary>
/// 存储过程
/// </summary>
IsStoredProcedure = 2
}
... {
/**//// <summary>
/// 表
/// </summary>
IsTable = 0,
/**//// <summary>
/// 视图
/// </summary>
IsView = 1,
/**//// <summary>
/// 存储过程
/// </summary>
IsStoredProcedure = 2
}
[NXExectueReturn("ReturnValue","_ReturnValue",ReturnFlag.IsDouble)]
NXExectueReturn标识返回值,存储过程可以有多个返回值,比如RETURN前有SELECT语句,会返回结果集,同样RETURN的也会返回,而在ORACLE中会有CURSOR返回结果集
实现代码:
/**/
/// <summary>
/// 存储过程执行后的返回结果属性标签
/// </summary>
[AttributeUsage(AttributeTargets.Constructor)]
public class NXExectueReturnAttribute : System.Attribute
... {
/**//// <summary>
/// 初始化,存储过程执行后的返回结果属性标签
/// </summary>
/// <param name="PropertyInfoName">指定属性的名称,指示该属性中保存类存储执行的返回结果</param>
/// <param name="PrivateFieldName">返回结果对应的属性Get或Set方法中,对应的私有变量的值</param>
/// <param name="Flag">返回结果标志</param>
public NXExectueReturnAttribute(string PropertyInfoName, string PrivateFieldName, ReturnFlag Flag)
...{
this._Flag = Flag;
this._Name = PropertyInfoName;
this._PrivateFieldName = PrivateFieldName;
if (PropertyInfoName != string.Empty && Flag == ReturnFlag.IsNonResult)
throw new NxException("指定了属性名称后,ReturnFlag标识不能是[IsNonResult]...");
}
/**//// <summary>
/// 初始化,存储过程执行后的返回结果属性标签,无参数的构造方法,表示无返回结果
/// </summary>
public NXExectueReturnAttribute() : this(string.Empty, string.Empty, ReturnFlag.IsNonResult) ...{ }
private string _Name = string.Empty;
/**//// <summary>
/// 指定属性的名称,指示该属性中保存执行存储的返回结果
/// </summary>
public string Name
...{
get ...{ return this._Name; }
set ...{ this._Name = value; }
}
private string _PrivateFieldName;
/**//// <summary>
/// 返回结果,保存的私有变量中
/// </summary>
public string PrivateFieldName
...{
get ...{ return this._PrivateFieldName; }
set ...{ this._PrivateFieldName = value; }
}
private ReturnFlag _Flag = ReturnFlag.IsNonResult;
/**//// <summary>
/// 执行存储过程后的返回结果标志
/// </summary>
public ReturnFlag Flag
...{
get ...{ return this._Flag; }
set ...{ this._Flag = value; }
}
}
/// 存储过程执行后的返回结果属性标签
/// </summary>
[AttributeUsage(AttributeTargets.Constructor)]
public class NXExectueReturnAttribute : System.Attribute
... {
/**//// <summary>
/// 初始化,存储过程执行后的返回结果属性标签
/// </summary>
/// <param name="PropertyInfoName">指定属性的名称,指示该属性中保存类存储执行的返回结果</param>
/// <param name="PrivateFieldName">返回结果对应的属性Get或Set方法中,对应的私有变量的值</param>
/// <param name="Flag">返回结果标志</param>
public NXExectueReturnAttribute(string PropertyInfoName, string PrivateFieldName, ReturnFlag Flag)
...{
this._Flag = Flag;
this._Name = PropertyInfoName;
this._PrivateFieldName = PrivateFieldName;
if (PropertyInfoName != string.Empty && Flag == ReturnFlag.IsNonResult)
throw new NxException("指定了属性名称后,ReturnFlag标识不能是[IsNonResult]...");
}
/**//// <summary>
/// 初始化,存储过程执行后的返回结果属性标签,无参数的构造方法,表示无返回结果
/// </summary>
public NXExectueReturnAttribute() : this(string.Empty, string.Empty, ReturnFlag.IsNonResult) ...{ }
private string _Name = string.Empty;
/**//// <summary>
/// 指定属性的名称,指示该属性中保存执行存储的返回结果
/// </summary>
public string Name
...{
get ...{ return this._Name; }
set ...{ this._Name = value; }
}
private string _PrivateFieldName;
/**//// <summary>
/// 返回结果,保存的私有变量中
/// </summary>
public string PrivateFieldName
...{
get ...{ return this._PrivateFieldName; }
set ...{ this._PrivateFieldName = value; }
}
private ReturnFlag _Flag = ReturnFlag.IsNonResult;
/**//// <summary>
/// 执行存储过程后的返回结果标志
/// </summary>
public ReturnFlag Flag
...{
get ...{ return this._Flag; }
set ...{ this._Flag = value; }
}
}
其中使用枚举ReturnFlag代码如下
public
enum
ReturnFlag :
int
... {
/**//// <summary>
/// 返回DataSet对象
/// </summary>
IsDataSet = 1,
/**//// <summary>
/// 返回值
/// </summary>
IsValue = 2,
/**//// <summary>
/// 无任何返回值
/// </summary>
IsNonResult = 3,
/**//// <summary>
/// 即返回DataSet对象,又有Return的返回值,DataSet在作为方法执行的返回结果,Return的返回值则保存在指定的属性中
/// </summary>
IsDouble = 4
}
... {
/**//// <summary>
/// 返回DataSet对象
/// </summary>
IsDataSet = 1,
/**//// <summary>
/// 返回值
/// </summary>
IsValue = 2,
/**//// <summary>
/// 无任何返回值
/// </summary>
IsNonResult = 3,
/**//// <summary>
/// 即返回DataSet对象,又有Return的返回值,DataSet在作为方法执行的返回结果,Return的返回值则保存在指定的属性中
/// </summary>
IsDouble = 4
}
[NXVar("parameter1","sIn","System.Int32","int",VarIOFlag.IsOutput)]
NXVar是标识存储过程的参数信息
实现代码:
/**/
/// <summary>
/// 存储过程的参数变量属性标签
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class NXVarAttribute : System.Attribute
... {
/**//// <summary>
/// 初始化,存储过程的参数变量
/// </summary>
/// <param name="Name">参数变量名称</param>
/// <param name="PrivateFieldName">参数变量Get或Set方法中对应的私有变量的值</param>
/// <param name="CSharpTypeName">参数变量名称[CSharp中的类型]</param>
/// <param name="DataTypeName">参数变量的源数据类型[数据类型]</param>
/// <param name="Flag">参数变量,输入输出标志</param>
public NXVarAttribute(string Name,string PrivateFieldName,string CSharpTypeName,string DataTypeName,VarIOFlag Flag)
...{
this._Name = Name;
this._PrivateFieldName = PrivateFieldName;
this._CSharpTypeName = CSharpTypeName;
this._DataTypeName = DataTypeName;
this._Flag = Flag;
}
private string _Name;
/**//// <summary>
/// 参数变量名称
/// </summary>
public string Name
...{
get...{return this._Name;}
set...{this._Name=value;}
}
private string _PrivateFieldName;
/**//// <summary>
/// 参数变量对应的私有变量的名称
/// </summary>
public string PrivateFieldName
...{
get...{return this._PrivateFieldName;}
set...{this._PrivateFieldName=value;}
}
private string _CSharpTypeName;
/**//// <summary>
/// 参数变量名称[CSharp中的类型]
/// </summary>
public string CSharpTypeName
...{
get...{return this._CSharpTypeName;}
set...{this._CSharpTypeName=value;}
}
private string _DataTypeName;
/**//// <summary>
/// 参数变量的源数据类型[数据类型]
/// </summary>
public string DataTypeName
...{
get...{return this._DataTypeName;}
set...{this._DataTypeName=value;}
}
private VarIOFlag _Flag = VarIOFlag.IsInput;
/**//// <summary>
/// 参数变量,输入输出标志
/// </summary>
public VarIOFlag Flag
...{
get...{return this._Flag;}
set...{this._Flag=value;}
}
private object _Value;
/**//// <summary>
/// 参数变量的值,用于 NxStoredProcedure 类(真正实现执行存储的类)
/// </summary>
internal object Value
...{
get ...{ return this._Value; }
set ...{ this._Value = value; }
}
}
/// 存储过程的参数变量属性标签
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class NXVarAttribute : System.Attribute
... {
/**//// <summary>
/// 初始化,存储过程的参数变量
/// </summary>
/// <param name="Name">参数变量名称</param>
/// <param name="PrivateFieldName">参数变量Get或Set方法中对应的私有变量的值</param>
/// <param name="CSharpTypeName">参数变量名称[CSharp中的类型]</param>
/// <param name="DataTypeName">参数变量的源数据类型[数据类型]</param>
/// <param name="Flag">参数变量,输入输出标志</param>
public NXVarAttribute(string Name,string PrivateFieldName,string CSharpTypeName,string DataTypeName,VarIOFlag Flag)
...{
this._Name = Name;
this._PrivateFieldName = PrivateFieldName;
this._CSharpTypeName = CSharpTypeName;
this._DataTypeName = DataTypeName;
this._Flag = Flag;
}
private string _Name;
/**//// <summary>
/// 参数变量名称
/// </summary>
public string Name
...{
get...{return this._Name;}
set...{this._Name=value;}
}
private string _PrivateFieldName;
/**//// <summary>
/// 参数变量对应的私有变量的名称
/// </summary>
public string PrivateFieldName
...{
get...{return this._PrivateFieldName;}
set...{this._PrivateFieldName=value;}
}
private string _CSharpTypeName;
/**//// <summary>
/// 参数变量名称[CSharp中的类型]
/// </summary>
public string CSharpTypeName
...{
get...{return this._CSharpTypeName;}
set...{this._CSharpTypeName=value;}
}
private string _DataTypeName;
/**//// <summary>
/// 参数变量的源数据类型[数据类型]
/// </summary>
public string DataTypeName
...{
get...{return this._DataTypeName;}
set...{this._DataTypeName=value;}
}
private VarIOFlag _Flag = VarIOFlag.IsInput;
/**//// <summary>
/// 参数变量,输入输出标志
/// </summary>
public VarIOFlag Flag
...{
get...{return this._Flag;}
set...{this._Flag=value;}
}
private object _Value;
/**//// <summary>
/// 参数变量的值,用于 NxStoredProcedure 类(真正实现执行存储的类)
/// </summary>
internal object Value
...{
get ...{ return this._Value; }
set ...{ this._Value = value; }
}
}
其中使用枚举VarIOFlag代码如下
/**/
/// <summary>
/// 存储过程的参数变量输入输出标志的枚举
/// </summary>
public enum VarIOFlag : int
... {
/**//// <summary>
/// 输入参数
/// </summary>
IsInput = 1,
/**//// <summary>
/// 输出参数
/// </summary>
IsOutput = 2,
/**//// <summary>
/// 即是输入参数,又是输出参数
/// </summary>
IsDouble = 3
}
/// 存储过程的参数变量输入输出标志的枚举
/// </summary>
public enum VarIOFlag : int
... {
/**//// <summary>
/// 输入参数
/// </summary>
IsInput = 1,
/**//// <summary>
/// 输出参数
/// </summary>
IsOutput = 2,
/**//// <summary>
/// 即是输入参数,又是输出参数
/// </summary>
IsDouble = 3
}
以上这些定义的属性,将在真正实现存储的类中进行反射,取得存储执行时的必要信息
如需转载,请表明出处
anthor:zerodj@163.com/javasuki@hotmail.com