假设现在有一个存储过程:GetNewID,
那么这个实体类是:
using System;
using System.Data;
using System.Collections.Generic;
using System.Data.sqlClient;
using System.ComponentModel;
using SSystem.Database;
namespace Entity
{
public class GetNewID
{
private IDbConnection _icon_entity = null;
public IDbConnection ICon_Entity
{
get { return _icon_entity; }
set { _icon_entity = value; }
}
private int _newid = 0;
private string _tablename = string.Empty;
private readonly int _maxLen_newid = 4;
private readonly int _maxLen_tablename = 254;
///<summary>
/// @NewID
/// INT(4)
/// Output
/// </summary>
public int @NewID
{
get { return _newid; }
set { _newid = value; }
}
///<summary>
/// @TableName
/// VARCHAR(254)
/// Input
/// </summary>
public string @TableName
{
get { return _tablename; }
set { _tablename = value; }
}
///<summary>
///执行一个存储过程
/// </summary>
///<typeparam name="T">只支持如下类型: object,IDataReader,DataSet,Dictionary<string,string>[]
/// <para>object:返回第一行第一列的值;</para>
/// <para>IDataReader:返回一个只读器,关闭这个对象则同时关闭数据库连接;注意,此方式无法获取标示为output的参数</para>
/// <para>DataSet:返回一个离线数据集合</para>
/// <para>Dictionary<string,string>[]:返回一个泛型的散列表</para>
///</typeparam>
///<param name="error">return a error message</param>
///<returns></returns>
public T Exec<T>(out string error)
{
error = "";
List<IDataParameter> sets = new List<IDataParameter>(2);
IDataParameter p1 = null;
p1 = new sqlParameter("@NewID",sqlDbType.Int,_maxLen_newid);
p1.Value = @NewID;
p1.Direction = ParameterDirection.Output;
sets.Add(p1);
IDataParameter p2 = null;
p2 = new sqlParameter("@TableName",sqlDbType.VarChar,_maxLen_tablename);
p2.Value = @TableName;
sets.Add(p2);
string typeName = typeof(T).Name.ToLower();
T result = default(T);
switch (typeName)
{
case "object":
result = (T)DBUtil.ExecuteScalarsp(_icon_entity,this.GetType().Name,sets,out error);
break; ;
case "idatareader":
result = (T)DBUtil.GetDataReaderSp(_icon_entity,out error);
break;
case "dataset":
result = (T)(IListSource)DBUtil.GetDataSetSp(_icon_entity,out error);
break;
default:
if (typeof(Dictionary<string,string>[]).Name.ToLower() == typeName)
{
IDataReader r = DBUtil.GetDataReaderSp(_icon_entity,out error);
List<Dictionary<string,string>> dyn = new List<Dictionary<string,string>>();
while (r.Read())
{
Dictionary<string,string> tmp = new Dictionary<string,string>(r.FieldCount);
for (int i = 0; i < r.FieldCount; i++)
{
tmp.Add(r.GetName(i),Convert.ToString(r.GetValue(i)));
}
dyn.Add(tmp);
}
r.Close();
result = (T)(object)dyn.ToArray();
}
break;
}
this._newid = Convert.ToInt32(p1.Value);
return result;
}
}
}
上面这个代码是通过CodeSmith自动生成的。这个实体类的调用方式:
GetNewID obj=new GetNewID();
obj.@TableName="User";
string error;
object oID = obj.Exec<object>(out error);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。