/// <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); } }