加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

存储过程实体类

发布时间:2020-12-12 15:14:22 所属栏目:MsSql教程 来源:网络整理
导读:数据库为:MS SQLServer。 假设现在有一个存储过程:GetNewID, 那么这个实体类是: using System; using System.Data; using System.Collections.Generic; using System.Data.SqlClient; using System.ComponentModel; using SSystem.Database; namespace En

数据库为:MS SQLServer。

假设现在有一个存储过程: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&lt;string,string&gt;[]
??????? ///??????????????????????????????????? <para>object:返回第一行第一列的值;</para>
??????? ///??????????????????????????????????? <para>IDataReader:返回一个只读器,关闭这个对象则同时关闭数据库连接;注意,此方式无法获取标示为output的参数</para>
??????? ///??????????????????????????????????? <para>DataSet:返回一个离线数据集合</para>
??????? ///??????????????????????????????????? <para>Dictionary&lt;string,string&gt;[]:返回一个泛型的散列表</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);

如果调用存储过程不抛出异常,则oID就能获取一个新的主键。

?

生成存储过程实体类的Codesmith文件在我的资源中,大家可以去下载。此方法能大大的简化调用存储过程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读