Exemple #1
0
        /// <summary>
        /// 执行存储过程读取数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="strProcedure"></param>
        /// <param name="strErrText"></param>
        /// <returns></returns>
        protected List <T> LoadData <T>(string strProcedure, out string strErrText)
        {
            List <T>      models = new List <T>();
            SqlDataReader dr     = null;

            try
            {
                SqlCommand command = new SqlCommand();
                command.Connection     = m_conn;
                command.CommandTimeout = 7200;
                command.CommandText    = strProcedure;
                command.CommandType    = CommandType.StoredProcedure;

                m_strInfoMessage = string.Empty;

                dr = command.ExecuteReader();

                DynamicBuilder <T> builder = DynamicBuilder <T> .CreateBuilder(dr);

                while (dr.Read())
                {
                    T model = default(T);
                    model = builder.Build(dr);
                    models.Add(model);
                }

                //用于获取存储过程RaiseError命令发出的错误消息。
                //如果存储过程中执行了RaiseError命令,则调用NextResult时就会引发异常
                dr.NextResult();

                dr.Close();
                dr.Dispose();

                strErrText = string.Empty;
                return(models);
            }
            catch (Exception e)
            {
                if (dr != null)
                {
                    dr.Close();
                    dr.Dispose();
                }

                strErrText = e.Message;
                return(null);
            }
        }