예제 #1
0
파일: Database.cs 프로젝트: Zedfa/Core
 public IEnumerable <T> SqlQuery <T>(string sql, params object[] parameters)
 {
     foreach (var item in _database.SqlQuery <T>(sql, parameters))
     {
         yield return(item);
     }
 }
        /// <summary>
        /// Wrapper function of Database.SqlQuery<T>.
        /// T can be any view, not necessary predefined model class
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="self"></param>
        /// <param name="sp"></param>
        /// <returns></returns>
        public static IEnumerable <T> SqlQuery <T>(this System.Data.Entity.Database self, IStoredProcedureBase sp)
        {
            if (self == null)
            {
                throw new ArgumentNullException("self");
            }
            if (sp == null)
            {
                throw new ArgumentException("IStoredProcedure sp");
            }
            var arguments = PrepareArguments(sp);

            try
            {
                return(self.SqlQuery <T>(arguments.Item1, arguments.Item2));
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(null);
        }
예제 #3
0
        private static IEnumerable SqlQueryForDynamicOtherDB(this System.Data.Entity.Database db, string sql, IDbConnection conn, params object[] parameters)
        {
            conn.ConnectionString = db.Connection.ConnectionString;

            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }

            IDbCommand cmd = conn.CreateCommand();

            cmd.CommandText = sql;
            if (parameters != null)
            {
                foreach (var item in parameters)
                {
                    cmd.Parameters.Add(item);
                }
            }

            using (IDataReader dataReader = cmd.ExecuteReader())
            {
                if (!dataReader.Read())
                {
                    return(null); //无结果返回Null
                }

                #region 构建动态字段

                TypeBuilder builder = DatabaseExtensions.CreateTypeBuilder(
                    "EF_DynamicModelAssembly",
                    "DynamicModule",
                    "DynamicType");

                int fieldCount = dataReader.FieldCount;
                for (int i = 0; i < fieldCount; i++)
                {
                    Type t = dataReader.GetFieldType(i);
                    switch (t.Name.ToLower())
                    {
                    case "decimal":
                        t = typeof(Decimal?);
                        break;

                    case "double":
                        t = typeof(Double?);
                        break;

                    case "datetime":
                        t = typeof(DateTime?);
                        break;

                    case "single":
                        t = typeof(float?);
                        break;

                    case "int16":
                        t = typeof(int?);
                        break;

                    case "int32":
                        t = typeof(int?);
                        break;

                    case "int64":
                        t = typeof(int?);
                        break;

                    default:
                        break;
                    }
                    DatabaseExtensions.CreateAutoImplementedProperty(
                        builder,
                        dataReader.GetName(i),
                        t);
                }

                #endregion

                cmd.Parameters.Clear();
                dataReader.Close();
                dataReader.Dispose();
                cmd.Dispose();
                conn.Close();
                conn.Dispose();

                Type returnType = builder.CreateType();

                if (parameters != null)
                {
                    return(db.SqlQuery(returnType, sql, parameters));
                }
                else
                {
                    return(db.SqlQuery(returnType, sql));
                }
            }
        }
예제 #4
0
        public int Count(string stmt)
        {
            var qry = m_database.SqlQuery <Int32>(stmt);

            return(qry.FirstOrDefault());
        }