PageRenderTime 36ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/Tools/LinqPad/LINQPad/DataContextBase.cs

https://github.com/vishalsh-spec/TestProject
C# | 267 lines | 251 code | 16 blank | 0 comment | 45 complexity | 2f9bcc07c5b8079f5397d53befe122c5 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, LGPL-2.0, Apache-2.0
  1. namespace LINQPad
  2. {
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Data.Common;
  7. using System.Data.Linq;
  8. using System.Data.Linq.Mapping;
  9. using System.Data.SqlClient;
  10. using System.Diagnostics;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Xml.Linq;
  14. public class DataContextBase : DataContext
  15. {
  16. internal static TextWriter SqlLog;
  17. public DataContextBase(IDbConnection connection) : base(WrapConnection(connection))
  18. {
  19. this.Init();
  20. }
  21. public DataContextBase(string fileOrConnectionString) : base(GetConnection(fileOrConnectionString))
  22. {
  23. this.Init();
  24. }
  25. public DataContextBase(IDbConnection connection, MappingSource mappingSource) : base(WrapConnection(connection), mappingSource)
  26. {
  27. this.Init();
  28. }
  29. public DataContextBase(string fileOrConnectionString, MappingSource mappingSource) : base(GetConnection(fileOrConnectionString), mappingSource)
  30. {
  31. this.Init();
  32. }
  33. protected override void Dispose(bool disposing)
  34. {
  35. base.Dispose(disposing);
  36. }
  37. public ReturnDataSet ExecuteStoredProcedure(string name, params object[] args)
  38. {
  39. bool flag;
  40. ReturnDataSet set;
  41. DbCommand command = this.Connection.CreateCommand();
  42. command.CommandText = name;
  43. command.CommandType = CommandType.StoredProcedure;
  44. command.CommandTimeout = 0;
  45. if (!(flag = this.Connection.State == ConnectionState.Open))
  46. {
  47. this.Connection.Open();
  48. }
  49. try
  50. {
  51. SqlCommand proxy = command as SqlCommand;
  52. if ((proxy == null) && (command is LINQPadDbCommand))
  53. {
  54. proxy = ((LINQPadDbCommand) command).Proxy as SqlCommand;
  55. }
  56. if (proxy == null)
  57. {
  58. return new ReturnDataSet();
  59. }
  60. SqlCommandBuilder.DeriveParameters(proxy);
  61. int num = 1;
  62. List<DbParameter> list = new List<DbParameter>();
  63. foreach (object obj2 in args)
  64. {
  65. if (num == command.Parameters.Count)
  66. {
  67. break;
  68. }
  69. object obj3 = obj2;
  70. IOptional optional = obj3 as IOptional;
  71. if (optional != null)
  72. {
  73. if (!optional.HasValue)
  74. {
  75. num++;
  76. continue;
  77. }
  78. obj3 = optional.Value;
  79. }
  80. if (obj3 is XNode)
  81. {
  82. obj3 = obj3.ToString();
  83. }
  84. else if (obj3 is Binary)
  85. {
  86. obj3 = ((Binary) obj3).ToArray();
  87. }
  88. command.Parameters[num].Value = (obj3 == null) ? DBNull.Value : obj3;
  89. num++;
  90. }
  91. foreach (DbParameter parameter in list)
  92. {
  93. proxy.Parameters.Remove(parameter);
  94. }
  95. LINQPadDbController.DbCommandExecuting(proxy);
  96. SqlDataAdapter adapter = new SqlDataAdapter(proxy);
  97. ReturnDataSet dataSet = new ReturnDataSet();
  98. Stopwatch stopwatch = Stopwatch.StartNew();
  99. adapter.Fill(dataSet);
  100. stopwatch.Stop();
  101. if (proxy.Parameters[0].Value is int)
  102. {
  103. dataSet.ReturnValue = (int) proxy.Parameters[0].Value;
  104. }
  105. Dictionary<string, object> source = new Dictionary<string, object>();
  106. foreach (SqlParameter parameter2 in proxy.Parameters)
  107. {
  108. if ((parameter2.Direction == ParameterDirection.InputOutput) || (parameter2.Direction == ParameterDirection.Output))
  109. {
  110. source[parameter2.ParameterName] = parameter2.Value;
  111. }
  112. }
  113. if (source.Any<KeyValuePair<string, object>>())
  114. {
  115. dataSet.OutputParameters = source;
  116. }
  117. int num3 = 0;
  118. foreach (DataTable table in dataSet.Tables)
  119. {
  120. table.TableName = "Result Set " + num3++;
  121. }
  122. LINQPadDbController.DbCommandFinished(stopwatch.Elapsed);
  123. set = dataSet;
  124. }
  125. finally
  126. {
  127. if (!flag)
  128. {
  129. this.Connection.Close();
  130. }
  131. }
  132. return set;
  133. }
  134. public static IDbConnection GetConnection(string fileOrConnectionString)
  135. {
  136. return GetConnection(fileOrConnectionString, null);
  137. }
  138. public static IDbConnection GetConnection(string fileOrConnectionString, string provider)
  139. {
  140. if (fileOrConnectionString == null)
  141. {
  142. return null;
  143. }
  144. string connectionString = GetConnectionString(fileOrConnectionString);
  145. if (!(((provider == null) || !ProviderNames.IsSqlCE(provider)) ? IsCompactDatabase(connectionString) : true))
  146. {
  147. return new LINQPadDbConnection(new SqlConnection(connectionString));
  148. }
  149. if (!((provider != null) && ProviderNames.IsSqlCE40(provider)))
  150. {
  151. return new SqlCE35Factory().GetCx(connectionString);
  152. }
  153. return new SqlCE40Factory().GetCx(connectionString);
  154. }
  155. private static string GetConnectionString(string fileOrConnectionString)
  156. {
  157. if (fileOrConnectionString.IndexOf('=') > 0)
  158. {
  159. return fileOrConnectionString;
  160. }
  161. DbConnectionStringBuilder builder = new DbConnectionStringBuilder();
  162. if (fileOrConnectionString.EndsWith(".mdf", StringComparison.OrdinalIgnoreCase))
  163. {
  164. builder.Add("AttachDBFileName", fileOrConnectionString);
  165. builder.Add("Server", @"localhost\sqlexpress");
  166. builder.Add("Integrated Security", "SSPI");
  167. builder.Add("User Instance", "true");
  168. builder.Add("MultipleActiveResultSets", "true");
  169. }
  170. else
  171. {
  172. if (!fileOrConnectionString.EndsWith(".sdf", StringComparison.OrdinalIgnoreCase))
  173. {
  174. return fileOrConnectionString;
  175. }
  176. builder.Add("Data Source", fileOrConnectionString);
  177. }
  178. return builder.ToString();
  179. }
  180. private void Init()
  181. {
  182. base.CommandTimeout = 0;
  183. if (!(base.Connection is LINQPadDbConnection))
  184. {
  185. base.Log = SqlLog;
  186. }
  187. }
  188. private static bool IsCompactDatabase(string cxString)
  189. {
  190. DbConnectionStringBuilder builder = new DbConnectionStringBuilder {
  191. ConnectionString = cxString
  192. };
  193. if (!builder.ContainsKey("Data Source"))
  194. {
  195. return false;
  196. }
  197. string str = (string) builder["Data Source"];
  198. if (str == null)
  199. {
  200. return false;
  201. }
  202. return str.EndsWith(".sdf", StringComparison.OrdinalIgnoreCase);
  203. }
  204. private static IDbConnection WrapConnection(IDbConnection cx)
  205. {
  206. if (cx is LINQPadDbConnection)
  207. {
  208. return cx;
  209. }
  210. SqlConnection proxy = cx as SqlConnection;
  211. if (proxy == null)
  212. {
  213. return cx;
  214. }
  215. return new LINQPadDbConnection(proxy);
  216. }
  217. public DbConnection Connection
  218. {
  219. get
  220. {
  221. if (base.Connection is LINQPadDbConnection)
  222. {
  223. return ((LINQPadDbConnection) base.Connection).Proxy;
  224. }
  225. return base.Connection;
  226. }
  227. }
  228. public DbTransaction Transaction
  229. {
  230. get
  231. {
  232. if (base.Transaction is LINQPadDbTransaction)
  233. {
  234. return ((LINQPadDbTransaction) base.Transaction).Proxy;
  235. }
  236. return base.Transaction;
  237. }
  238. set
  239. {
  240. if (!(!(value is LINQPadDbTransaction) && (base.Connection is LINQPadDbConnection)))
  241. {
  242. base.Transaction = value;
  243. }
  244. else
  245. {
  246. base.Transaction = new LINQPadDbTransaction((LINQPadDbConnection) base.Connection, value);
  247. }
  248. }
  249. }
  250. }
  251. }