• ABP框架 sql语句(转载)


    ABP.Core实现SQL语句仓储,支持EF.Core兼容的数据库

    ISqlRepository.cs代码

    public interface ISqlRepository : IRepository
        {
            /// <summary>
            /// 执行给定的命令
            /// </summary>
            /// <param name="sql">命令字符串</param>
            /// <param name="parameters">要应用于命令字符串的参数</param>
            /// <returns>执行命令后由数据库返回的结果</returns>
            Task<int> Execute(string sql, params object[] parameters);
     
     
            /// <summary>
            /// 执行语句返回dataset,注意参数用@p0、@p1、@p3...以此类推,要按照顺序
            /// </summary>
            /// <param name="sql">sql语句</param>
            /// <param name="parameters">sql参数</param>
            /// <returns>dataset</returns>
            Task<DataTable> ExecuteDataTable(string sql, params object[] parameters);
        }

    SqlRepository.cs代码

    public class SqlRepository : ISqlRepository, ITransientDependency
        {
            private readonly IDbContextProvider<SmartDbContext> _dbContextProvider;
            public SqlRepository(IDbContextProvider<SmartDbContext> dbContextProvider)
            {
                _dbContextProvider = dbContextProvider;
            }
     
            /// <summary>
            /// 执行给定的命令
            /// </summary>
            /// <param name="sql">命令字符串</param>
            /// <param name="parameters">要应用于命令字符串的参数</param>
            /// <returns>执行命令后由数据库返回的结果</returns>
            public async Task<int> Execute(string sql, params object[] parameters)
            {
                return await _dbContextProvider.GetDbContext().Database.ExecuteSqlCommandAsync(sql, parameters);
            }
     
            public async Task<DataTable> ExecuteDataTable(string sql, params object[] parameters)
            {
                return await Task.Run(() =>
                {
     
                    var db = _dbContextProvider.GetDbContext().Database;
                    var conn = db.GetDbConnection();
                    if (conn.State != ConnectionState.Open)
                        conn.Open();
     
     
                    DataTable dt = new DataTable();
     
     
                    RawSqlCommand rawSqlCommand = db.GetService<IRawSqlCommandBuilder>().Build(sql, parameters);
     
                    RelationalDataReader query = rawSqlCommand.RelationalCommand.ExecuteReader(db.GetService<IRelationalConnection>(), parameterValues: rawSqlCommand.ParameterValues);
     
     
                    DbDataReader dr = query.DbDataReader;
     
     
                    int fieldCount = dr.FieldCount;
     
                    //获取schema并填充第一行数据
                    if (dr.Read())
                    {
                        for (int i = 0; i < fieldCount; i++)
                        {
                            string colName = dr.GetName(i);
                            dt.Columns.Add(colName, dr.GetFieldType(i));
                        }
                        DataRow newrow = dt.NewRow();
                        for (int i = 0; i < fieldCount; i++)
                        {
                            newrow[i] = dr[i];
                        }
                        dt.Rows.Add(newrow);
                    }
                    //填充后续数据
                    while (dr.Read())
                    {
                        DataRow newrow = dt.NewRow();
                        for (int i = 0; i < fieldCount; i++)
                        {
                            newrow[i] = dr[i];
                        }
                        dt.Rows.Add(newrow);
                    }
                    dt.AcceptChanges();
     
                    return 
     思路:
    1 ef可以直接写sql,然后试着调用这个方法。
    2 ORM从EF切换到ADO或NHibernate,然后试着调用这个方法。
    3 若ORM无法切换到原生ADO,基础设施层加一个原生ADO层,然后(应用服务层)试着调用这个方法。
     
  • 相关阅读:
    JQuery上传插件Uploadify使用详解
    jquery easyui datagrid使用参考
    easyui datagrid使用(好)
    灵活运用 SQL SERVER FOR XML PATH
    C# HttpRequest 中文编码问题
    echarts简单使用
    [bootstrap] 修改字体
    css :not 选择器
    [win7] 带网络的安全模式,启动QQEIMPlatform第三方服务
    [mysql] 添加用户,赋予不同的管理权限
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/10243698.html
Copyright © 2020-2023  润新知