Exemplo n.º 1
0
        /// <summary>
        /// Build SQL string from request info
        /// </summary>
        /// <param name="request">Request from which to construct the SqlString</param>
        protected string BuildSqlString(SqlRequest request)
        {
            StringBuilder sbSelect = new StringBuilder("SELECT * FROM ");
            StringBuilder sbFilter = new StringBuilder("");

            sbSelect.Append(request.Resource);
            string sqlOrder = "";

            if (request.DocumentId == null)
            {
                sbFilter.Append(ParseFilters(request.Filters));
                sqlOrder = ParseSort(request.Sort);
            }
            else
            {
                sbFilter.Append("Id=" + request.DocumentId.ToString());
            }
            if (request.IfModifiedSince != null)
            {
                sbFilter.Append(" AND [TimeStamp] >= " + "'" + ((DateTime)request.IfModifiedSince).ToString("MM/dd/yyyy HH:mm:ss") + "'");
            }
            sbSelect.Append(sbFilter.ToString() != "" ? " WHERE " + sbFilter.ToString() : "");
            sbSelect.Append(sqlOrder != "" ? " ORDER BY " + sqlOrder : "");
            return(sbSelect.ToString());
        }
        /// <summary>
        /// Read datatable from database with request parameters
        /// </summary>
        /// <param name="request">The request with all parameters</param>
        /// <returns>A datatable filled with results</returns>
        private DataTable GetDataTable(SqlRequest request)
        {
            // Reading data from database
            TurboDBConnection  conn = GetConnection(request.DataSourceName, request.DataSourcePassword);
            TurboDBDataAdapter apt  = new TurboDBDataAdapter(BuildSqlString(request), conn);
            DataTable          tb   = new DataTable();

            apt.Fill(tb);
            return(tb);
        }
        /// <summary>
        /// Method that execute the read request
        /// </summary>
        /// <typeparam name="T">Return type parameter for property Content in response</typeparam>
        /// <param name="request">The request for data from DataSource</param>
        /// <returns></returns>
        private Response <T> ExecuteRead <T>(SqlRequest request) where T : new()
        {
            DataTable tb = GetDataTable(request);

            if (tb.Rows.Count > 0)
            {
                if (request.DocumentId == null)
                {
                    Type         t    = new T().GetType().GetGenericArguments()[0];
                    var          obj  = Activator.CreateInstance(t);
                    Response <T> resp = new Response <T>();
                    resp.Content = new T();
                    object[] a = new object[1];

                    foreach (DataRow dr in tb.Rows)
                    {
                        obj = Activator.CreateInstance(t);
                        FillObject(obj, dr);
                        a[0] = obj;
                        resp.Content.GetType().GetMethod("Add").Invoke(resp.Content, a);
                    }
                    resp.StatusCode     = StatusCode.Accepted;
                    resp.ResponseStatus = ResponseStatus.Completed;
                    return(resp);
                }
                else
                {
                    T obj = new T();
                    FillObject(obj, tb.Rows[0]);
                    Response <T> resp = new Response <T>();
                    resp.Content        = obj;
                    resp.StatusCode     = StatusCode.Accepted;
                    resp.ResponseStatus = ResponseStatus.Completed;
                    return(resp);
                }
            }
            else
            {
                Response <T> resp = new Response <T>();
                resp.StatusCode     = StatusCode.Accepted;
                resp.ResponseStatus = ResponseStatus.Error;
                resp.ErrorMessage   = "Item not found";
                return(resp);
            }
        }