/// <summary> /// Function used to set database (or no database). /// </summary> public void DatabaseSelectionMenu() { string[] options = new string[] { "Window login Authentication", "SQL Server Authentication", "No SQL Database" }; string[] sqlInfo; string firstConnection; bool run = true; Reporter.Log("Program starting"); do { byte answer = VisualCalculator.MenuRun(options, "Database"); switch (answer) { case 0: sqlInfo = new string[2]; sqlInfo[0] = Support.CollectString("Enter Servername"); sqlInfo[1] = Support.CollectString("Enter database"); if (!ShallDatabaseInitialiseMenu()) { try { SQLCode.SQLControl.DataBase = sqlInfo[1]; firstConnection = SQLCode.SQLControl.CreateConnectionString(sqlInfo[0], "master"); run = !SQLCode.SQLControl.InitalitionOfDatabase(sqlInfo, firstConnection, true); SQLCode.SQLControl.DatabaseInUse = true; } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); run = true; } } else { try { SQLCode.SQLControl.DataBase = sqlInfo[1]; run = !SQLCode.SQLControl.CreateConnection(sqlInfo, true); SQLCode.SQLControl.DatabaseInUse = true; } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); run = true; } } break; case 1: sqlInfo = new string[4]; sqlInfo[0] = Support.CollectString("Enter Servername"); sqlInfo[1] = Support.CollectString("Enter SQL Username"); sqlInfo[2] = Support.HiddenText("Enter Password"); sqlInfo[3] = Support.CollectString("Enter database"); if (!ShallDatabaseInitialiseMenu()) { try { SQLCode.SQLControl.DataBase = sqlInfo[3]; firstConnection = SQLCode.SQLControl.CreateConnectionString(sqlInfo[0], sqlInfo[1], sqlInfo[2], "master"); run = !SQLCode.SQLControl.InitalitionOfDatabase(sqlInfo, firstConnection, false); SQLCode.SQLControl.DatabaseInUse = true; } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); run = true; } } else { try { SQLCode.SQLControl.DataBase = sqlInfo[3]; run = !SQLCode.SQLControl.CreateConnection(sqlInfo, false); SQLCode.SQLControl.DatabaseInUse = true; } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); run = true; } } break; case 2: WareInformation.AddWareDefault(); SQLCode.SQLControl.DatabaseInUse = false; break; } if (answer == options.Length - 1) { run = false; } if (run == true) { Console.Clear(); Console.WriteLine("Could not establish connection to the database"); Support.WaitOnKeyInput(); } } while (run); }
/// <summary> /// Asks the user to enter an amount and returns it. /// </summary> /// <returns></returns> private int CollectAmount() { return(Support.CollectValue("Enter Amount")); }
/// <summary> /// Asks the user to enter an ID and returns it. /// </summary> /// <returns>Returns the inputted ID.</returns> private string CollectID() { return(Support.CollectString("Enter ID")); }
/// <summary> /// Allows for the modifcation of one or more values of the ware with <paramref name="ID"/>. /// /// </summary> /// <param name="ID"></param> public static void ModifyWare(string ID) { if (!SQLCode.SQLControl.DatabaseInUse) { string[] options = null; try { options = GenerateOptions(ID, SQLCode.SQLControl.DatabaseInUse); } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); } if (options != null) { Dictionary <string, object> informations = WareInformation.GetWareInformation(ID, out List <Type> valueTypes); byte?answer; do { answer = VisualCalculator.MenuRun(options, "Select entry to modify"); if (answer != options.Length - 1) { object oldValue = informations[options[(byte)answer]]; if (valueTypes[(byte)answer].IsValueType) { try { object newValue = CollectValue(valueTypes[(byte)answer], oldValue); Publisher.PubWare.AlterWare(ID, newValue, options[(byte)answer]); } catch (Exception e) { ErrorHandling(e); } } else { //string and arrays goes here. if (valueTypes[(byte)answer].FullName == "System.String") { FillOutString(options, answer, oldValue); } else if (valueTypes[(byte)answer].BaseType.Name == "Array") { FillOutArray(options, answer, valueTypes, oldValue); } } } } while (answer != options.Length - 1); } } else //SQL { //get the type of the ID, find the attributes of that ID string[] options = GenerateOptions(ID, SQLCode.SQLControl.DatabaseInUse); string[] columns = new string[options.Length - 1]; string[] allColumns = null; string[] allColumnTypes = null; try { allColumns = SQLCode.StoredProcedures.GetColumnNamesAndTypesSP(out allColumnTypes); } catch (Exception e) { Support.ErrorHandling(e, $"Could not retrive column names and types: {e.Message}"); } if (allColumns != null && allColumnTypes != null) { for (int i = 0; i < columns.Length; i++) { columns[i] = options[i]; } List <string> values = SQLCode.SQLControl.GetValuesSingleWare(columns, $"'{ID}'"); byte? answer; do { answer = VisualCalculator.MenuRun(options, "Select entry to modify"); if (answer != options.Length - 1) { string oldValue = values[(byte)answer] != "" ? values[(byte)answer] : "Null"; OutPut.FullScreenClear(); OutPut.DisplayMessage($"Old Value was {oldValue}. Enter new Value: ", true); string newValue = Console.ReadLine(); //MSSQL does not seem like it has arrays as a datatype for (int i = 0; i < allColumns.Length; i++) { if (allColumns[i] == options[(byte)answer]) { if (allColumnTypes[i] == "nvarchar") { newValue = $"'{newValue}'"; break; } } } try { SQLCode.SQLControl.ModifyWare("Inventory", new string[] { options[(byte)answer] }, new string[] { newValue }, $"id = '{ID}'"); } catch (Exception e) { Reporter.Report(e); OutPut.FullScreenClear(); OutPut.DisplayMessage($"Could not create the ware: {e.Message}", true); Support.WaitOnKeyInput(); } } } while (answer != options.Length - 1); } } void ErrorHandling(Exception e) { Reporter.Report(e); OutPut.FullScreenClear(); OutPut.DisplayMessage(String.Format("Could not convert: {0}", e.InnerException.Message), true); Support.WaitOnKeyInput(); } void FillOutString(string[] options, byte?answer, object oldValue) { OutPut.FullScreenClear(); OutPut.DisplayMessage($"Old Value was {oldValue ?? "Null"}. Enter new Value: ", true); string newValue = Input.GetString(); try { Publisher.PubWare.AlterWare(ID, newValue, options[(byte)answer]); } catch (Exception e) { Support.ErrorHandling(e, $"Encountered an error: {e.Message}"); } } void FillOutArray(string[] options, byte?answer, List <Type> valueTypes, object oldValue) { List <object> objectList = new List <object>(); string[] addValueOptions = new string[] { "Enter Value", "Done" }; byte? valueAnswer; do { valueAnswer = VisualCalculator.MenuRun(addValueOptions, "Add Data Entry"); if (valueAnswer == 0) { if (!valueTypes[(byte)answer].Name.Contains("String")) { //non-string try { objectList.Add(CollectValue(Type.GetType(valueTypes[(byte)answer].FullName.Remove(valueTypes[(byte)answer].FullName.Length - 2, 2)), oldValue)); //code inside of Type.GetType(...) converts an array type to a non-array type } catch (Exception e) { ErrorHandling(e); } } else { //string OutPut.FullScreenClear(); objectList.Add(Input.GetString()); } } } while (valueAnswer != addValueOptions.Length - 1); object[] objectArray = objectList.ToArray(); try { Publisher.PubWare.AlterWare(ID, objectArray, options[(byte)answer]); } catch (Exception e) { Support.ErrorHandling(e, $"Encountered an erorr: {e.Message}"); } } }