PageRenderTime 26ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/Ximura Data Persistence/Persistence Managers/SQLDB Based/SQLDBPersistenceManager_Read.cs

https://github.com/mbmccormick/Ximura
C# | 210 lines | 164 code | 35 blank | 11 comment | 11 complexity | c47bfa4d37830823eb32f65c5deeafbf MD5 | raw file
  1. #region Copyright
  2. // *******************************************************************************
  3. // Copyright (c) 2000-2009 Paul Stancer.
  4. // All rights reserved. This program and the accompanying materials
  5. // are made available under the terms of the Eclipse Public License v1.0
  6. // which accompanies this distribution, and is available at
  7. // http://www.eclipse.org/legal/epl-v10.html
  8. //
  9. // Contributors:
  10. // Paul Stancer - initial implementation
  11. // *******************************************************************************
  12. #endregion
  13. #region using
  14. using System;
  15. using System.ComponentModel;
  16. using System.Collections;
  17. using System.Collections.Generic;
  18. using System.Diagnostics;
  19. using System.IO;
  20. using System.Text;
  21. using System.Data;
  22. using System.Data.SqlClient;
  23. using System.Data.SqlTypes;
  24. using System.Reflection;
  25. using System.Transactions;
  26. using System.Runtime.Serialization;
  27. using Ximura;
  28. using Ximura.Data;
  29. using Ximura.Data;
  30. using Ximura.Data;
  31. using Ximura.Framework;
  32. using Ximura.Framework;
  33. using CH = Ximura.Common;
  34. using AH = Ximura.AttributeHelper;
  35. #endregion
  36. namespace Ximura.Data
  37. {
  38. public partial class SQLDBPersistenceManager<CONT, DCONT>
  39. {
  40. protected virtual T EntityRead<T>(CDSContext context,
  41. SqlConnection sqlConn, Guid ID, bool IDIsVersion, out int response)
  42. where T : Content
  43. {
  44. Guid TypeID = typeof(T).GetContentTypeAttributeID();
  45. SqlCommand sqlCmd = new SqlCommand("EntityRead", sqlConn);
  46. sqlCmd.CommandType = CommandType.StoredProcedure;
  47. sqlCmd.Parameters.Add("@Tid", SqlDbType.UniqueIdentifier).Value = TypeID;
  48. sqlCmd.Parameters.Add("@ID", SqlDbType.UniqueIdentifier).Value = ID;
  49. sqlCmd.Parameters.Add("@IDIsVersion", SqlDbType.Bit).Value = IDIsVersion;
  50. SqlParameter paramStatus = new SqlParameter();
  51. paramStatus.ParameterName = "@Status";
  52. paramStatus.SqlDbType = SqlDbType.Int;
  53. paramStatus.IsNullable = true;
  54. paramStatus.Direction = ParameterDirection.InputOutput;
  55. paramStatus.Value = System.DBNull.Value;
  56. sqlCmd.Parameters.Add(paramStatus);
  57. SqlParameter paramSubstatus = new SqlParameter();
  58. paramSubstatus.ParameterName = "@Substatus";
  59. paramSubstatus.SqlDbType = SqlDbType.NVarChar;
  60. paramSubstatus.Size = 100;
  61. paramSubstatus.IsNullable = true;
  62. paramSubstatus.Direction = ParameterDirection.InputOutput;
  63. paramSubstatus.Value = System.DBNull.Value;
  64. sqlCmd.Parameters.Add(paramSubstatus);
  65. SqlParameter paramReturnValue = new SqlParameter();
  66. paramReturnValue.ParameterName = "@return_value";
  67. paramReturnValue.SqlDbType = SqlDbType.Int;
  68. paramReturnValue.Direction = ParameterDirection.ReturnValue;
  69. sqlCmd.Parameters.Add(paramReturnValue);
  70. SqlBytes returnBytes = SqlBytes.Null;
  71. using (SqlDataReader reader = sqlCmd.ExecuteReader())
  72. {
  73. if (reader.HasRows)
  74. {
  75. reader.Read();
  76. returnBytes = reader.GetSqlBytes(0);
  77. }
  78. reader.Close();
  79. }
  80. response = (int)paramStatus.Value;
  81. if (response != 200)
  82. return null;
  83. SerializationInfo info = ContentFormatter.GetSerializationInfo(returnBytes.Stream);
  84. T data = context.GetObjectPool<T>().Get(info, new StreamingContext(StreamingContextStates.All));
  85. return data;
  86. }
  87. protected virtual Content EntityRead(CDSContext context, Type contentType,
  88. SqlConnection sqlConn, Guid TypeID, Guid ID, bool IDIsVersion, out int response)
  89. {
  90. SqlCommand sqlCmd = new SqlCommand("EntityRead", sqlConn);
  91. sqlCmd.CommandType = CommandType.StoredProcedure;
  92. sqlCmd.Parameters.Add("@Tid", SqlDbType.UniqueIdentifier).Value = TypeID;
  93. sqlCmd.Parameters.Add("@ID", SqlDbType.UniqueIdentifier).Value = ID;
  94. sqlCmd.Parameters.Add("@IDIsVersion", SqlDbType.Bit).Value = IDIsVersion;
  95. SqlParameter paramStatus = new SqlParameter();
  96. paramStatus.ParameterName = "@Status";
  97. paramStatus.SqlDbType = SqlDbType.Int;
  98. paramStatus.IsNullable = true;
  99. paramStatus.Direction = ParameterDirection.InputOutput;
  100. paramStatus.Value = System.DBNull.Value;
  101. sqlCmd.Parameters.Add(paramStatus);
  102. SqlParameter paramSubstatus = new SqlParameter();
  103. paramSubstatus.ParameterName = "@Substatus";
  104. paramSubstatus.SqlDbType = SqlDbType.NVarChar;
  105. paramSubstatus.Size = 100;
  106. paramSubstatus.IsNullable = true;
  107. paramSubstatus.Direction = ParameterDirection.InputOutput;
  108. paramSubstatus.Value = System.DBNull.Value;
  109. sqlCmd.Parameters.Add(paramSubstatus);
  110. SqlParameter paramReturnValue = new SqlParameter();
  111. paramReturnValue.ParameterName = "@return_value";
  112. paramReturnValue.SqlDbType = SqlDbType.Int;
  113. paramReturnValue.Direction = ParameterDirection.ReturnValue;
  114. sqlCmd.Parameters.Add(paramReturnValue);
  115. SqlBytes returnBytes = SqlBytes.Null;
  116. using (SqlDataReader reader = sqlCmd.ExecuteReader())
  117. {
  118. if (reader.HasRows)
  119. {
  120. reader.Read();
  121. returnBytes = reader.GetSqlBytes(0);
  122. }
  123. reader.Close();
  124. }
  125. //response = (int)paramReturnValue.Value;
  126. response = (int)paramStatus.Value;
  127. if (response != 200)
  128. return null;
  129. SerializationInfo info = ContentFormatter.GetSerializationInfo(returnBytes.Stream);
  130. Content data = (Content)context.GetObjectPool(contentType).Get(info, new StreamingContext(StreamingContextStates.All));
  131. return data;
  132. }
  133. protected override bool Read(CDSContext context)
  134. {
  135. string strConn = SQLConnectionResolve(context);
  136. Guid? typeID = context.Request.DataTypeID;
  137. if (!typeID.HasValue)
  138. typeID = context.Request.DataType.GetContentTypeAttributeID();
  139. if (!context.Request.DataVersionID.HasValue && !context.Request.DataContentID.HasValue)
  140. {
  141. context.Response.Status = CH.HTTPCodes.NotFound_404;
  142. context.Response.Substatus = "DataVersionID and DataContentID are null.";
  143. return true;
  144. }
  145. Guid ID = context.Request.DataVersionID.HasValue
  146. ? context.Request.DataVersionID.Value : context.Request.DataContentID.Value;
  147. Content data;
  148. int response;
  149. try
  150. {
  151. using (SqlConnection sqlConn = new SqlConnection(strConn))
  152. {
  153. sqlConn.Open();
  154. data = EntityRead(context, context.Request.DataType, sqlConn,
  155. typeID.Value, ID, context.Request.DataVersionID.HasValue, out response);
  156. }
  157. if (response == 200)
  158. {
  159. context.Response.Data = data;
  160. }
  161. else
  162. {
  163. context.Response.Data = null;
  164. }
  165. context.Response.Status = response.ToString();
  166. }
  167. catch (Exception ex)
  168. {
  169. context.Response.Status = CH.HTTPCodes.InternalServerError_500;
  170. context.Response.Substatus = ex.Message;
  171. }
  172. return true;
  173. }
  174. }
  175. }