zoukankan      html  css  js  c++  java
  • Entity Framework 支持 DataTable

    转载:http://www.cnblogs.com/wlflovenet/archive/2011/12/30/EF11.html

    datatable 在有的时候是非常有用的 例如 做报表等  因为我们不可能为每个报表建一个 实体类 这样比较麻烦

    这个时候返回datatable  则比较有用

    (这也是Entity Framework跨库的一种解决方案,虽然无法直接获取实体对象。不过对于webapi来说,直接返回datatable给访问者,会自动转换为json。所以如果你使用webapi时,遇见Entity Framework跨库,也可以采用这种方式

    写一个扩展方法

    复制代码
       /// <summary>
           /// EF SQL 语句返回 dataTable
           /// </summary>
           /// <param name="db"></param>
           /// <param name="sql"></param>
           /// <param name="parameters"></param>
           /// <returns></returns>
           public static DataTable QueryTable_Extend(this Database db,
                    string sql,
                    SqlParameter[] parameters=null)
            {
    
                SqlConnection conn = new System.Data.SqlClient.SqlConnection();
                try
                {
                    conn.ConnectionString = db.Connection.ConnectionString;
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    cmd.CommandText = sql;
    
    
                    if (parameters != null && parameters.Length > 0)
                    {
                        foreach (var item in parameters)
                        {
                            cmd.Parameters.Add(item);
                        }
                    }
    
    
    
    
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    DataTable table = new DataTable();
                    adapter.Fill(table);
                    return table;
                }
                finally
                {
                    conn.Close();
                }
            }
    复制代码

    调用如下

    复制代码
       protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GridView1.DataSource = GetDataTable();
                GridView1.DataBind();
            }
        }
    
    
        public DataTable GetDataTable()
        {
            GardenHotelContext context = new GardenHotelContext();
            int LanType = 0;
            int state = 0;
            SqlParameter[] sqlparams=new SqlParameter[2];
            sqlparams[0]=new SqlParameter("LanType",LanType);
            sqlparams[1]=new SqlParameter("state",state);
    
    
    //这里有个问题,在使用时传递进来的 db.Connection有时为空。
    //(具体原因还没找到。调试过,db的确有值,但是调用次方法时,就会显示没值,导致数据库登陆失败)
    //所以需要给db.Connection重新赋值一下
    db.Connection.ConnectionString = WebConfigurationManager.ConnectionStrings["POEntities"].ToString();
    DataTable DataTable = context.Database.SqlQueryForDataTatable("select LeaveName,LeaveEmail from LeaveInfo where LanType=@LanType and State=@State", sqlparams); return DataTable; }
    复制代码

    这里顺便提一下:由于扩展方法,每次需要using命名空间,然而方法却无法自动提示。所以目前我是创建在页面同级节点下的。当然这是一个不好的习惯,目前没有找到好的解决方法。
  • 相关阅读:
    解析大型.NET ERP系统 权限模块设计与实现
    Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架
    解析大型.NET ERP系统 单据编码功能实现
    解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计
    Windows 10 部署Enterprise Solution 5.5
    解析大型.NET ERP系统 设计异常处理模块
    解析大型.NET ERP系统 业务逻辑设计与实现
    解析大型.NET ERP系统 多国语言实现
    Enterprise Solution 管理软件开发框架流程实战
    解析大型.NET ERP系统 数据审计功能
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779896.html
Copyright © 2011-2022 走看看