示例#1
0
        public async Task <SqlResponse> GetAsync(string uri, SqlRequest request)
        {
            var wreq         = GetWebRequest(uri, request);
            var httpResponse = await wreq.GetResponseAsync();

            var rawdata       = "";
            var validresponse = false;

            using (var stream = httpResponse.GetResponseStream())
            {
                if (stream != null)
                {
                    using (var sr = new StreamReader(stream))
                    {
                        rawdata       = sr.ReadToEnd();
                        validresponse = true;
                    }
                }
            }

            if (!validresponse)
            {
                throw new CrateException("Invalid or empty response!");
            }
            if (((HttpWebResponse)httpResponse).StatusCode != HttpStatusCode.OK)
            {
                throw new CrateException("Invalid response status code: " + ((HttpWebResponse)httpResponse).StatusCode);
            }

            return(JsonConvert.DeserializeObject <SqlResponse>(rawdata));
        }
示例#2
0
        /// <summary>
        /// 获取数据表的主键
        /// </summary>
        /// <param name="tableName">表名</param>
        private void GetKeyName(string tableName)
        {
            if (string.IsNullOrWhiteSpace(tableName))
            {
                return;
            }

            string sql = " SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE  WHERE TABLE_NAME = @TableName ";

            List <SqlParameter> s_param = new List <SqlParameter>();

            s_param.Add(new SqlParameter("@TableName", tableName));

            try
            {
                SqlDataReader reader = SqlRequest.GetReader(sql, s_param.ToArray());

                string field_name = string.Empty;

                while (reader.Read())
                {
                    KeyName = reader["COLUMN_NAME"].ToString();
                }

                reader.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("获取数据表的主键名称出错了", ex);
            }
        }
示例#3
0
        private HttpWebRequest GetWebRequest(string uri, SqlRequest request)
        {
            var wreq = (HttpWebRequest)WebRequest.Create(uri);

            wreq.Method      = "POST";
            wreq.ContentType = "application/json";
            wreq.Timeout     = _timeout;

            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            var dataload = JsonConvert.SerializeObject(request,
                                                       new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.None
            });
            var buffer = Encoding.UTF8.GetBytes(dataload);

            using (var sw = wreq.GetRequestStream())
            {
                sw.Write(buffer, 0, buffer.Length);
            }

            return(wreq);
        }
示例#4
0
        /// <summary>
        /// 根据主键获取一行记录
        /// </summary>
        /// <param name="table"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public CModel GetModelByKey(string table, object key)
        {
            CModel m_table = new CModel(table);

            string sql = SqlSplice.GetSelect(m_table, key);

            CModel model = null;

            try
            {
                SqlDataReader reader = SqlRequest.GetReader(sql, SqlSplice.SqlParams.ToArray());

                while (reader.Read())
                {
                    model = new CModel(table);

                    foreach (var field in model.Fields)
                    {
                        model[field] = reader[field];
                    }
                }



                return(model);
            }
            catch (Exception ex)
            {
                throw new Exception("根据主键查询一行记录出错了", ex);
            }
        }
示例#5
0
        /// <summary>
        /// 查询一行记录
        /// </summary>
        /// <param name="filter">过滤器</param>
        /// <returns>返回单条数据</returns>
        public CModel GetModel(ModelFilter filter)
        {
            string sql = filter.ExecuteSql.ToString();

            CModel model = null;

            try
            {
                SqlDataReader reader = SqlRequest.GetReader(sql, filter.GetParams());

                while (reader.Read())
                {
                    model = new CModel(filter.TableName);

                    foreach (var field in filter.Fields)
                    {
                        model[field] = reader[field];
                    }
                }


                reader.Close();

                return(model);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#6
0
        public Basic.Framework.Web.BasicResponse <string> QueryTableBySqlString(SqlRequest req)
        {
            var responseStr = HttpClientHelper.Post(Webapi + "/v1/Sql/QueryTableStringBySql?token=" + Token, JSONHelper.ToJSONString(req));
            var res         = JSONHelper.ParseJSONString <BasicResponse <string> >(responseStr);

            return(res);
        }
示例#7
0
        public virtual ISqlRequest BulkAddModels(IEnumerable <Database.UserDefinedTypes.Demo.UdtModel> models)
        {
            var request = new SqlRequest(_queryChain, "Demo", "BulkAddModels");

            request.Parameters.Add(new StoredProcedureTableTypeParameter("@Models", "table type", ParameterDirection.Input, "Demo", "udtModel", models));
            return(request);
        }
示例#8
0
        public static async ValueTask <ObjectSchema> GetObjectSchema(this DbConnection @this, string name)
        {
            var objectName = name.Split('.').Get(^ 1) !.TrimStart('[').TrimEnd(']');
            var schemaName = name.Contains("..") ? (object)DBNull.Value : name.Split('.').Get(^ 2) !.TrimStart('[').TrimEnd(']');
            var request    = new SqlRequest(ObjectSchema.SQL);

            request.Parameters.Add(ObjectSchema.OBJECT_NAME, objectName);
            request.Parameters.Add(ObjectSchema.SCHEMA_NAME, schemaName);
            var(tableRowSet, columnRowSet, parameterRowSet, _) = await @this.RunAsync(request);

            if (tableRowSet?.Rows.Any() is not true)
            {
                throw new ArgumentException($"{nameof(DbConnection)}.{nameof(GetObjectSchema)}: Database object was not found.", objectName);
            }

            var columns = Array <ColumnSchema> .Empty;

            if (columnRowSet?.Rows.Any() is true)
            {
                columns = 0.Range(columnRowSet !.Rows.Length).To(i => new ColumnSchema
                {
                    Hidden     = (bool)columnRowSet[i, nameof(ColumnSchema.Hidden)] !,
                    Id         = (int)columnRowSet[i, nameof(ColumnSchema.Id)] !,
                    Identity   = (bool)columnRowSet[i, nameof(ColumnSchema.Identity)] !,
                    Length     = (int)columnRowSet[i, nameof(ColumnSchema.Length)] !,
                    Name       = (string)columnRowSet[i, nameof(ColumnSchema.Name)] !,
                    Nullable   = (bool)columnRowSet[i, nameof(ColumnSchema.Nullable)] !,
                    PrimaryKey = (bool)columnRowSet[i, nameof(ColumnSchema.PrimaryKey)] !,
                    ReadOnly   = (bool)columnRowSet[i, nameof(ColumnSchema.ReadOnly)] !,
                    Type       = (SqlDbType)columnRowSet[i, nameof(ColumnSchema.Type)] !
                }).ToArray();
示例#9
0
        public virtual ISqlRequest GetModelsByBrandIdAndYear(int?brandId, int?year)
        {
            var request = new SqlRequest(_queryChain, "Demo", "GetModelsByBrandIdAndYear");

            request.Parameters.Add(new StoredProcedureSimpleParameter("@BrandId", "int", ParameterDirection.Input, brandId));
            request.Parameters.Add(new StoredProcedureSimpleParameter("@Year", "int", ParameterDirection.Input, year));
            return(request);
        }
示例#10
0
        public BasicResponse <int> GetReportTotalRecord(Sys.Safety.Request.ReportGetReportTotalRecordRequest reportRequest)
        {
            // 20171106
            BasicResponse <int> response = new BasicResponse <int>();

            int count = 0;

            var    _strFreQryCondition = reportRequest._strFreQryCondition;
            var    ListID          = reportRequest.ListID;
            var    _listdate       = reportRequest._listdate;
            var    ListDataID      = reportRequest.ListDataID;
            int    filterType      = reportRequest.FilterType;
            int    removeRepetType = reportRequest.RemoveRepetType;
            string arrangeTime     = reportRequest.ArrangeTime;

            SetDayTableSql(_strFreQryCondition, ListID, _listdate, filterType, removeRepetType);

            if (_strFreQryCondition.ToLower().IndexOf("datsearch") > 0)
            {
                string strdate = _strFreQryCondition.Substring(_strFreQryCondition.ToLower().IndexOf("datsearch") + 10, 55);
                _strFreQryCondition = _strFreQryCondition.Replace(strdate, " <> '1900-1-1'");
            }

            //string strsql = "select strListSQL from BFT_ListDataEx where ListID=" + ListID + " and ListDataID=" + ListDataID + " LIMIT 0,1 ";
            //DataTable dtSourceSql = _Repository.QueryTable(strsql);
            var    item   = _ListdataexRepository.Datas.FirstOrDefault(o => o.ListID == ListID && o.ListDataID == ListDataID);
            string strsql = string.Empty;

            if (item != null)
            {
                string strSortWhere = "";
                IList <ListdatalayountInfo> listDataLayoutDTO = this.GetListLayout(filterType, arrangeTime, ListDataID);
                strSortWhere = listDataLayoutDTO != null && listDataLayoutDTO.Count > 0
                    ? "and " + listDataLayoutDTO[0].StrConTextCondition
                    : "";
                strsql = item.StrListSQL;// Convert.ToString(dtSourceSql.Rows[0]["strListSQL"]);
                strsql = strsql.Replace("where 1=1", "where 1=1 " + _strFreQryCondition + strSortWhere);
            }
            if (this.GetDBType() == "mysql")
            {
                strsql = strsql.Replace("ISNULL", "IFNULL").Replace("isnull", "ifnull");
            }
            this.GetDistinctSql(ref strsql, ListID);
            //count = _Repository.GetTotalRecord(strsql);
            SqlRequest countsqlrequest = new SqlRequest
            {
                Sql = strsql
            };
            DataTable temptable = _SqlService.QueryTableBySql(countsqlrequest).Data;

            if (temptable != null && temptable.Rows.Count > 0)
            {
                count = temptable.Rows.Count;
            }

            response.Data = count;
            return(response);
        }
示例#11
0
        public BasicResponse <int> ExecuteNonQueryBySql(SqlRequest req)
        {
            var ret = _listexRepository.ExecuteNonQueryBySql(req.Sql);

            return(new BasicResponse <int>()
            {
                Data = ret
            });
        }
示例#12
0
        public Basic.Framework.Web.BasicResponse <string> QueryTableStringBySql(SqlRequest req)
        {
            var res = _sqlService.QueryTableBySql(req);

            return(new BasicResponse <string>()
            {
                Data = ObjectConverter.ToBase64String(res.Data)
            });
        }
示例#13
0
        public virtual ISqlRequest AddModel(int?brandId, string name, int?horsePower, int?year)
        {
            var request = new SqlRequest(_queryChain, "Demo", "AddModel");

            request.Parameters.Add(new StoredProcedureSimpleParameter("@BrandId", "int", ParameterDirection.Input, brandId));
            request.Parameters.Add(new StoredProcedureSimpleParameter("@HorsePower", "int", ParameterDirection.Input, horsePower));
            request.Parameters.Add(new StoredProcedureSimpleParameter("@Name", "nvarchar", ParameterDirection.Input, name));
            request.Parameters.Add(new StoredProcedureSimpleParameter("@Year", "int", ParameterDirection.Input, year));
            return(request);
        }
示例#14
0
        public BasicResponse <DataTable> QueryTableBySql(SqlRequest req)
        {
            var dt  = _listexRepository.QueryTableBySql(req.Sql);
            var ret = new BasicResponse <DataTable>()
            {
                Data = dt
            };

            return(ret);
        }
示例#15
0
        /// <summary>
        /// Executes the command
        /// </summary>
        /// <param name="request">The command request</param>
        /// <returns>The result of the command</returns>
        public override SqlNonQueryResult Execute(SqlRequest request)
        {
            using SqlConnection connection = _connectionProvider.GetConnection(request.Options);

            using SqlCommand command = GetSqlCommand(connection, request);

            int numberOfRowsAffected = command.ExecuteNonQuery();

            return(new SqlNonQueryResult(numberOfRowsAffected));
        }
        public async Task <Request> GetById(string id)
        {
            if (int.TryParse(id, out int reqId))
            {
                SqlRequest sqlRequest = await dbcontext.SqlRequests.FirstOrDefaultAsync(x => x.Id == reqId);

                return(mapper.Map <Request>(sqlRequest));
            }
            return(null);
        }
        public IList <Student> GetAll()
        {
            SqlRequest request = new SqlRequest()
            {
                CommandName   = SqlName.spAllStudent,
                CommandParams = null
            };

            return(context.ExecuteSqlCommand <Student>(request).ToList());
        }
示例#18
0
        /// <summary>
        /// Executes the command asynchronously
        /// </summary>
        /// <param name="request">The command request</param>
        /// <param name="cancellationToken">The cancellation token in scope for the operation</param>
        /// <returns>The result of the command</returns>
        public override async Task <SqlNonQueryResult> ExecuteAsync(SqlRequest request, CancellationToken cancellationToken)
        {
            await using SqlConnection connection = await _connectionProvider.GetConnectionAsync(cancellationToken);

            await using SqlCommand command = GetSqlCommand(connection, request);

            int numberOfRowsAffected = await command.ExecuteNonQueryAsync(cancellationToken);

            return(new SqlNonQueryResult(numberOfRowsAffected));
        }
        /// <summary>
        /// Executes the command
        /// </summary>
        /// <param name="request">The command request</param>
        /// <returns>The result of the command</returns>
        public override SqlQueryResult Execute(SqlRequest request)
        {
            using SqlConnection connection = _connectionProvider.GetConnection(request.Options);

            using SqlCommand command = GetSqlCommand(connection, request);

            DataTable dataTable = _commandExecutor.Execute(command);

            return(new SqlQueryResult(dataTable));
        }
示例#20
0
        public Basic.Framework.Web.BasicResponse <DataTable> QueryTableBySql(SqlRequest req)
        {
            var res   = QueryTableBySqlString(req);
            var resZh = ObjectConverter.FromBase64String <DataTable>(res.Data);

            return(new BasicResponse <DataTable>
            {
                Data = resZh
            });
        }
示例#21
0
        public void TestThatStatementParameterPlaceholderGetParsedCorrectly()
        {
            var stmt           = @"select * from schema.test where name = @name and form_id = @form_id";
            var expectedResult = @"select * from schema.test where name = $1 and form_id = $2";

            var parameters = new object[] { "theName", 1 };

            var sqlRequest = new SqlRequest(stmt, parameters);

            Assert.AreEqual(expectedResult, sqlRequest.Stmt);
        }
示例#22
0
        public void Initialize()
        {
            foreach (var map in SimpleORM.Current.Mappings.Values)
            {
                var result = connection.ExecuteQuery <int?>("SELECT count(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '" + map.Name + "'").FirstOrDefault();

                if (result.HasValue && result == 0)
                {
                    StringBuilder createTableCommand = new StringBuilder();
                    createTableCommand.Append("CREATE TABLE [" + map.Name + "](");
                    foreach (var column in map.Data)
                    {
                        var fieldReferences = false;

                        foreach (var reference in map.References)
                        {
                            if (reference.Value.Value == column.Key.Name)
                            {
                                fieldReferences = true;
                                break;
                            }
                        }

                        var valueToAppend = column.Value;
                        if (fieldReferences)
                        {
                            valueToAppend = valueToAppend.Replace("MAX", "500");
                        }

                        if (map.SecondaryKeyNames.Contains(column.Key.Name))
                        {
                            valueToAppend = valueToAppend.Replace("MAX", "500");

                            valueToAppend += " UNIQUE NOT NULL";
                        }

                        if (map.PrimaryKeyName == column.Key.Name && !map.SecondaryKeyNames.Contains(column.Key.Name))
                        {
                            valueToAppend += " NOT NULL";
                        }

                        valueToAppend += ",";

                        createTableCommand.Append(valueToAppend);
                    }
                    createTableCommand.Append(")");

                    var request = new SqlRequest(createTableCommand.ToString());
                    Execute(request);
                }
            }

            BuildReferences();
        }
示例#23
0
		public async Task Invoke(HttpContext httpContext)
		{
			using var reader = new StreamReader(httpContext.Request.Body);
			var request = new SqlRequest
			{
				SQL = reader.ReadToEnd()
			};
			httpContext.Request.Query.Do(query => request.Parameters[query.Key] = query.Value.First());

			await this.HandleRequest<SqlRequest, RowSet[]>(request, httpContext);
		}
        /// <summary>
        /// Executes the command
        /// </summary>
        /// <param name="request">The command request</param>
        /// <returns>The result of the command</returns>
        public override TResult Execute(SqlRequest request)
        {
            using SqlConnection connection = _connectionProvider.GetConnection(request.Options);

            using SqlCommand command = GetSqlCommand(connection, request);

            object result = command.ExecuteScalar();

            return(result == null || result == DBNull.Value
                ? default
                : (TResult)result);
        }
        /// <summary>
        /// Executes the command asynchronously
        /// </summary>
        /// <param name="request">The command request</param>
        /// <param name="cancellationToken">The cancellation token in scope for the operation</param>
        /// <returns>The result of the command</returns>
        public override async Task <TResult> ExecuteAsync(SqlRequest request, CancellationToken cancellationToken)
        {
            await using SqlConnection connection = await _connectionProvider.GetConnectionAsync(cancellationToken);

            await using SqlCommand command = GetSqlCommand(connection, request);

            object result = await command.ExecuteScalarAsync(cancellationToken);

            return(result == null || result == DBNull.Value
                ? default
                : (TResult)result);
        }
        public Student Find(int id)
        {
            SqlRequest request = new SqlRequest
            {
                CommandName   = SqlName.spFindStudent,
                CommandParams = new
                {
                    StudentId = id
                }
            };

            return(context.ExecuteSqlCommand <Student>(request).SingleOrDefault());
        }
示例#27
0
        /// <summary>
        /// 删除一行或多行记录
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="filter"></param>
        public void DeleteModel(ModelFilter filter)
        {
            string sql = SqlSplice.GetDelete(filter);

            try
            {
                SqlRequest.Update(sql, filter.Params.ToArray());
            }
            catch (Exception ex)
            {
                throw new Exception("删除记录出错了", ex);
            }
        }
示例#28
0
        /// <summary>
        /// 查询表的数据总数量
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <returns></returns>
        public int SelectCount(string tableName)
        {
            string sql = $"SELECT COUNT(1) as DATA_COUNT FROM {tableName}";

            SqlDataReader reader = SqlRequest.GetReader(sql);

            int data_count = 0;

            if (reader.Read())
            {
                data_count = Convert.ToInt32(reader["DATA_COUNT"]);
            }

            return(data_count);
        }
示例#29
0
        /// <summary>
        /// 查询多行记录
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="filter">过滤器</param>
        /// <returns></returns>
        public List <T> GetModels <T>(ModelFilter filter)
        {
            Type type = typeof(T);

            string sql = filter.ExecuteSql.ToString();

            List <CModel> models = new List <CModel>();

            try
            {
                SqlDataReader reader = SqlRequest.GetReader(sql, filter.Params.ToArray());

                while (reader.Read())
                {
                    CModel model = new CModel(type);

                    foreach (var field in model.Fields)
                    {
                        model[field] = reader[field];
                    }

                    models.Add(model);
                }

                reader.Close();


                List <T> m_objs = new List <T>();

                if (models.Count <= 0)
                {
                    return(m_objs);
                }

                foreach (var model in models)
                {
                    T m_obj = JsonConverter.CModelToModel <T>(model);

                    m_objs.Add(m_obj);
                }

                return(m_objs);
            }
            catch (Exception ex)
            {
                throw new Exception("查询多行记录出错了", ex);
            }
        }
        protected SqlCommand GetSqlCommand(SqlConnection connection, SqlRequest request)
        {
            using var command = new SqlCommand(request.Sql, connection);

            if (request.Parameters != null)
            {
                command.Parameters.AddRange(ToSqlParameters(request.Parameters));
            }

            if (request.Timeout.HasValue)
            {
                command.CommandTimeout = request.Timeout.Value.Seconds;
            }

            return(command);
        }
示例#31
0
 public virtual ISqlRequest AddBrand(string name, string slogan, string country, DateTime? founded)
 {
     var request = new SqlRequest(_queryChain, "Demo", "AddBrand");
     request.Parameters.Add(new StoredProcedureSimpleParameter("@Country", "nvarchar", ParameterDirection.Input, country));
     request.Parameters.Add(new StoredProcedureSimpleParameter("@Founded", "datetime2", ParameterDirection.Input, founded));
     request.Parameters.Add(new StoredProcedureSimpleParameter("@Name", "nvarchar", ParameterDirection.Input, name));
     request.Parameters.Add(new StoredProcedureSimpleParameter("@Slogan", "nvarchar", ParameterDirection.Input, slogan));
     return request;
 }
示例#32
0
 public virtual ISqlRequest ScalarNoParameters()
 {
     var request = new SqlRequest(_queryChain, "IntegrationTest", "Scalar_NoParameters");
     return request;
 }
示例#33
0
 public virtual ISqlRequest NonQueryNoParameters()
 {
     var request = new SqlRequest(_queryChain, "IntegrationTest", "NonQuery_NoParameters");
     return request;
 }
示例#34
0
 public virtual ISqlRequest MultipleResultSetsNoParameters()
 {
     var request = new SqlRequest(_queryChain, "IntegrationTest", "MultipleResultSets_NoParameters");
     return request;
 }
示例#35
0
 public virtual ISqlRequest GetModelsByMinimumYearAndMinimumHorsePower(int? minimumYear, int? minimumHorsePower)
 {
     var request = new SqlRequest(_queryChain, "Demo", "GetModelsByMinimumYearAndMinimumHorsePower");
     request.Parameters.Add(new StoredProcedureSimpleParameter("@MinimumHorsePower", "int", ParameterDirection.Input, minimumHorsePower));
     request.Parameters.Add(new StoredProcedureSimpleParameter("@MinimumYear", "int", ParameterDirection.Input, minimumYear));
     return request;
 }
示例#36
0
 public virtual ISqlRequest GetAllBrandsAndModels()
 {
     var request = new SqlRequest(_queryChain, "Demo", "GetAllBrandsAndModels");
     return request;
 }
示例#37
0
 public virtual ISqlRequest BulkAddModels(IEnumerable<Database.UserDefinedTypes.Demo.UdtModel> models)
 {
     var request = new SqlRequest(_queryChain, "Demo", "BulkAddModels");
     request.Parameters.Add(new StoredProcedureTableTypeParameter("@Models", "table type", ParameterDirection.Input, "Demo", "udtModel", models));
     return request;
 }
示例#38
0
 public virtual ISqlRequest AddModel(int? brandId, string name, int? horsePower, int? year)
 {
     var request = new SqlRequest(_queryChain, "Demo", "AddModel");
     request.Parameters.Add(new StoredProcedureSimpleParameter("@BrandId", "int", ParameterDirection.Input, brandId));
     request.Parameters.Add(new StoredProcedureSimpleParameter("@HorsePower", "int", ParameterDirection.Input, horsePower));
     request.Parameters.Add(new StoredProcedureSimpleParameter("@Name", "nvarchar", ParameterDirection.Input, name));
     request.Parameters.Add(new StoredProcedureSimpleParameter("@Year", "int", ParameterDirection.Input, year));
     return request;
 }