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

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

    https://www.cnblogs.com/hanjun0612/p/9779896.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命名空间,然而方法却无法自动提示。所以目前我是创建在页面同级节点下的。当然这是一个不好的习惯,目前没有找到好的解决方法。
  • 相关阅读:
    多路RTSP流解码:最高可支持12路视频编解码
    RK3399 PRO快速开发
    人脸识别精准营销解决方案
    EC-A3399ProC 六核64位AI嵌入式主机
    Cluster Server R1集群服务器
    韦东山推出基于Firefly平台的升级版嵌入式Linux教程
    【上传图片】上传图片二三事
    【linux】阿里云防火墙相关
    【php】LAMP中开启错误提示
    【mysql】mysql优化
  • 原文地址:https://www.cnblogs.com/tsql/p/10248354.html
Copyright © 2011-2022 走看看