PageRenderTime 100ms CodeModel.GetById 5ms RepoModel.GetById 0ms app.codeStats 0ms

/BetVM/dbclass/Gruppe.cs

http://betvm.googlecode.com/
C# | 381 lines | 259 code | 68 blank | 54 comment | 14 complexity | 3788acb2200ab4059b3e2fe5c39d86fc MD5 | raw file
Possible License(s): BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Data.SqlClient;
  6. namespace BetVM.dbclass
  7. {
  8. public class Gruppe
  9. {
  10. #region variables
  11. public int _GruppenID;
  12. public int _TurnierID;
  13. public string _Name;
  14. public int _Einsatz;
  15. #endregion
  16. #region kontruktor
  17. /// <summary>
  18. /// Konstruktor
  19. /// </summary>
  20. public Gruppe()
  21. {
  22. }
  23. /// <summary>
  24. /// Konstruktor mit Initialisierung der Variablen
  25. /// </summary>
  26. /// <param name="pGruppenID"></param>
  27. /// <param name="pTurnierID"></param>
  28. /// <param name="pName"></param>
  29. /// <param name="pEinsatz"></param>
  30. public Gruppe( int pTurnierID, string pName, int pEinsatz)
  31. {
  32. this._TurnierID = pTurnierID;
  33. this._Name = pName;
  34. this._Einsatz = pEinsatz;
  35. }
  36. #endregion
  37. #region Methoden / Schnittstellen
  38. /// <summary>
  39. /// Insert eines neuen Eintrags in die Tabelle mit den Daten aus den Variablen
  40. /// </summary>
  41. /// <returns>True, wenn Insert erfolgreich.</returns>
  42. public bool insert()
  43. {
  44. SqlConnection connection = MSSQL_connectionFunctions.OpenConnection();
  45. SqlCommand command = connection.CreateCommand();
  46. command.Connection = connection;
  47. command.CommandText = "UPDATE betvm.dbo.gruppe SET Name = @Name,Einsatz = @Einsatz,TurnierID = @TurnierID WHERE Name = @Name " +
  48. "IF @@ROWCOUNT = 0 " +
  49. "INSERT INTO betvm.dbo.gruppe(TurnierID,Name,Einsatz) VALUES (@TurnierID,@Name,@Einsatz)";
  50. command.Parameters.AddWithValue("TurnierID", this._TurnierID);
  51. command.Parameters.AddWithValue("Einsatz", this._Einsatz);
  52. command.Parameters.AddWithValue("Name", this._Name);
  53. command.ExecuteNonQuery();
  54. connection.Close();
  55. return true;
  56. }
  57. /// <summary>
  58. /// Initialisiert Gruppe anhand einer GruppenID.
  59. /// Bei der Initialisierung werden alle Eigenschaften (Variablen) der Gruppe belegt.
  60. /// </summary>
  61. /// <param name="pGruppenID">GruppenID der Gruppe, die initialisiert werden soll.</param>
  62. /// <returns>True, wenn Initialisierung erfolgreich.</returns>
  63. public bool getGruppeByGruppenID(int pGruppenID) {
  64. SqlConnection connection = MSSQL_connectionFunctions.OpenConnection();
  65. SqlCommand command = connection.CreateCommand();
  66. command.Connection = connection;
  67. command.Parameters.AddWithValue("GruppenID", pGruppenID);
  68. command.CommandText = "Select * from betvm.dbo.gruppe WHERE GruppenID = @GruppenID";
  69. SqlDataReader reader = command.ExecuteReader();
  70. if (reader.HasRows)
  71. {
  72. while (reader.Read())
  73. {
  74. this._GruppenID = pGruppenID; ;
  75. this._Name = reader["Name"].ToString();
  76. this._TurnierID = Convert.ToInt32(reader["TurnierID"]);
  77. this._Einsatz = Convert.ToInt32(reader["Einsatz"]);
  78. }
  79. }
  80. else {
  81. reader.Close();
  82. connection.Close();
  83. return false;
  84. }
  85. reader.Close();
  86. connection.Close();
  87. return true;
  88. }
  89. /// <summary>
  90. /// Initialisiert Gruppe anhand eines Gruppennamens.
  91. /// Bei der Initialisierung werden alle Eigenschaften (Variablen) der Gruppe belegt.
  92. /// </summary>
  93. /// <param name="pGruppenname">Gruppenname der Gruppe, die initialisiert werden soll.</param>
  94. /// <returns>True, wenn Vorgang erfolgreich.</returns>
  95. public bool getGruppeByName(string pGruppenname)
  96. {
  97. SqlConnection connection = MSSQL_connectionFunctions.OpenConnection();
  98. SqlCommand command = connection.CreateCommand();
  99. command.Connection = connection;
  100. command.Parameters.AddWithValue("Name", pGruppenname);
  101. command.CommandText = "Select * from betvm.dbo.gruppe WHERE Name = @Name";
  102. SqlDataReader reader = command.ExecuteReader();
  103. if (reader.HasRows)
  104. {
  105. while (reader.Read())
  106. {
  107. this._GruppenID = Convert.ToInt32(reader["GruppenID"]);
  108. this._Name = pGruppenname;
  109. this._TurnierID = Convert.ToInt32(reader["TurnierID"]);
  110. this._Einsatz = Convert.ToInt32(reader["Einsatz"]);
  111. }
  112. }
  113. else
  114. {
  115. reader.Close();
  116. connection.Close();
  117. return false;
  118. }
  119. reader.Close();
  120. connection.Close();
  121. return true;
  122. }
  123. /// <summary>
  124. /// Zählt Anzahl der Gruppenmitglieder der initialisierten Gruppe.
  125. /// </summary>
  126. /// <returns>Int-Wert, Anzahl der Gruppenmitglieder.</returns>
  127. public int countUsers()
  128. {
  129. SqlConnection connection = MSSQL_connectionFunctions.OpenConnection();
  130. SqlCommand command = connection.CreateCommand();
  131. command.Connection = connection;
  132. command.Parameters.AddWithValue("GruppenID", this._GruppenID);
  133. command.CommandText = "Select count(*) as UserAnzahl from betvm.dbo.gruppenbenutzer where GruppenID = @GruppenID";
  134. SqlDataReader reader = command.ExecuteReader();
  135. if (reader.HasRows)
  136. {
  137. reader.Read();
  138. int UserAnzahl = Convert.ToInt32(reader["UserAnzahl"]);
  139. reader.Close();
  140. connection.Close();
  141. return UserAnzahl;
  142. }
  143. else
  144. {
  145. reader.Close();
  146. connection.Close();
  147. return -1;
  148. }
  149. }
  150. /// <summary>
  151. /// Liefert Rangliste für die initialisierte Gruppe unter ihren eigenen mitgliedern.
  152. /// </summary>
  153. /// <returns>Dictionary-Objekt, das Benutzer und ihren zugehörigen Rang enthält.</returns>
  154. public Dictionary<Benutzer, int> getRangliste()
  155. {
  156. Dictionary<Benutzer, int> Rangliste = new Dictionary<Benutzer, int>();
  157. int EinladungsStatusID = Status.getStatusIDByWert("mitglied");
  158. SqlConnection connection = MSSQL_connectionFunctions.OpenConnection();
  159. SqlCommand command = connection.CreateCommand();
  160. command.Connection = connection;
  161. command.Parameters.AddWithValue("GruppenID", this._GruppenID);
  162. command.Parameters.AddWithValue("TurnierID", this._TurnierID);
  163. command.Parameters.AddWithValue("EinladungsStatusID", EinladungsStatusID);
  164. command.CommandText = "Select SUM(t.Punkte) as Punkte, b.BenutzerID, b.Benutzername from betvm.dbo.benutzer b, betvm.dbo.gruppenbenutzer gb, betvm.dbo.tipp t, betvm.dbo.spiel s, betvm.dbo.turniermannschaft tm " +
  165. "WHERE b.BenutzerID = gb.BenutzerID AND b.BenutzerID = t.BenutzerID AND gb.GruppenID = @GruppenID AND gb.EinladungsStatusID = @EinladungsStatusID "+
  166. "AND t.SpielID = s.SpielID AND s.Team1ID = tm.TurniermannschaftID AND tm.TurnierID = @TurnierID Group BY b.BenutzerID, b.Benutzername Order BY Punkte desc";
  167. SqlDataReader reader = command.ExecuteReader();
  168. //Falls Daten vorhanden
  169. if (reader.HasRows)
  170. {
  171. Benutzer tempBenutzer;
  172. while (reader.Read())
  173. {
  174. tempBenutzer = new Benutzer();
  175. tempBenutzer._BenutzerID = Convert.ToInt32(reader["BenutzerID"]);
  176. tempBenutzer._Benutzername = reader["Benutzername"].ToString();
  177. Rangliste.Add(tempBenutzer, Convert.ToInt32(reader["Punkte"]));
  178. }
  179. }
  180. reader.Close();
  181. connection.Close();
  182. return Rangliste;
  183. }
  184. /// <summary>
  185. /// Zählt Anzahl an Mitgliedern in der initialisierten Gruppe mit einer angegebenen Gruppenrolle.
  186. /// </summary>
  187. /// <param name="pRolle">Rolle der Benutzer in der Gruppe, die gezähltt werden sollen.</param>
  188. /// <returns>Int-Wert</returns>
  189. public int countMembersOfRole(String pRolle)
  190. {
  191. try
  192. {
  193. SqlConnection connection = MSSQL_connectionFunctions.OpenConnection();
  194. SqlCommand command = connection.CreateCommand();
  195. command.Connection = connection;
  196. command.Parameters.AddWithValue("GruppenID", this._GruppenID);
  197. command.Parameters.AddWithValue("Rolle", pRolle);
  198. command.CommandText = "Select count(*) as Anzahl from betvm.dbo.gruppenbenutzer where GruppenID = @GruppenID AND Rolle = @Rolle";
  199. SqlDataReader reader = command.ExecuteReader();
  200. int count = 0;
  201. if (reader.HasRows)
  202. {
  203. while (reader.Read())
  204. {
  205. count = Convert.ToInt32(reader["Anzahl"]);
  206. }
  207. }
  208. reader.Close();
  209. connection.Close();
  210. return count;
  211. }
  212. catch (Exception)
  213. {
  214. return 0;
  215. }
  216. }
  217. /// <summary>
  218. /// Löscht die initialisierte Gruppe.
  219. /// </summary>
  220. /// <returns></returns>
  221. public bool delete()
  222. {
  223. try
  224. {
  225. SqlConnection connection = MSSQL_connectionFunctions.OpenConnection();
  226. SqlCommand command = connection.CreateCommand();
  227. command.Connection = connection;
  228. command.Parameters.AddWithValue("GruppenID", this._GruppenID);
  229. command.CommandText = "delete from betvm.dbo.gruppe where GruppenID = @GruppenID";
  230. command.ExecuteNonQuery();
  231. connection.Close();
  232. return true;
  233. }
  234. catch (Exception)
  235. {
  236. return false;
  237. }
  238. }
  239. #endregion
  240. #region Statische Methoden
  241. /// <summary>
  242. /// Liefert die Gruppennamen, in denen ein Benutzer der einzige Admin ist.
  243. /// </summary>
  244. /// <param name="pBenutzername">Benutzername des Benutzers.</param>
  245. /// <returns>String-Array mit Namen der Gruppen.</returns>
  246. public static string[] getGruppenWithSingleAdminByBenutzername(string pBenutzername)
  247. {
  248. SqlConnection connection = MSSQL_connectionFunctions.OpenConnection();
  249. SqlCommand command = connection.CreateCommand();
  250. command.Connection = connection;
  251. command.Parameters.AddWithValue("aktBenutzer", pBenutzername);
  252. command.CommandText = "Select Abfrage1.Name FROM "+
  253. "(Select g.GruppenID, g.Name, count(gb.GruppenBenutzerID) as AnzahlAdmins "+
  254. "FROM gruppe g,gruppenbenutzer gb "+
  255. "where g.GruppenID = gb.GruppenID AND gb.Rolle = 'Admin' Group by g.Name, g.GruppenID) as Abfrage1 "+
  256. "INNER JOIN "+
  257. "(Select gb.GruppenID "+
  258. "from gruppenbenutzer gb, benutzer b "+
  259. "where b.Benutzername = @aktBenutzer AND gb.BenutzerID = b.BenutzerID AND gb.Rolle = 'Admin') as Abfrage2 "+
  260. "ON (Abfrage1.GruppenID = Abfrage2.GruppenID) "+
  261. "WHERE AnzahlAdmins < 2";
  262. SqlDataReader reader = command.ExecuteReader();
  263. List<string> tempList = new List<string>();
  264. if (reader.HasRows)
  265. {
  266. while (reader.Read())
  267. {
  268. tempList.Add(reader["Name"].ToString());
  269. }
  270. }
  271. else {
  272. return null;
  273. }
  274. reader.Close();
  275. connection.Close();
  276. return tempList.ToArray();
  277. }
  278. /// <summary>
  279. /// Überprüft ob ein Gruppenname, bereits in der Datenbank esistiert.
  280. /// </summary>
  281. /// <param name="pName">Name, der überprüft werden soll.</param>
  282. /// <returns>True, wenn der Name bereits existiert oder wenn ein Fehler auftritt.</returns>
  283. public static bool checkNameExist(string pName)
  284. {
  285. try
  286. {
  287. SqlConnection connection = MSSQL_connectionFunctions.OpenConnection();
  288. SqlCommand command = connection.CreateCommand();
  289. command.Connection = connection;
  290. command.Parameters.AddWithValue("Name", pName);
  291. command.CommandText = "select * from betvm.dbo.gruppe where Name = @Name";
  292. SqlDataReader reader = command.ExecuteReader();
  293. if (reader.HasRows)
  294. {
  295. reader.Close();
  296. connection.Close();
  297. return true;
  298. }
  299. else
  300. {
  301. reader.Close();
  302. connection.Close();
  303. return false;
  304. }
  305. }
  306. catch
  307. {
  308. return true;
  309. }
  310. }
  311. #endregion
  312. }
  313. }