public static void Execute(string host, string datasourcename, int cloudid, int type, string description = "", bool useSelection = false) { Range target = useSelection ? Useful.ActiveRange : Useful.ActiveSheet.UsedRange; object[,] headers = target.Cell(1, 1).EntireRow.Value2; for (int i = headers.GetLowerBound(1); i <= headers.GetUpperBound(1); i++) { if (headers[1, i] is string q) { for (int j = 0; j < q.Length; j++) { // Regex.Match("", @"[_a-zA-Z][_a-zA-Z\d]*").Success; // Maybe use a regex? if (!((q[j] >= 'A' && q[j] <= 'Z') || (q[j] >= 'a' && q[j] <= 'z') || (q[j] >= '0' && q[j] <= '9') || q[j] == '_')) { Useful.Error(Resources.ErrorHeadersNeedAlphaNumericChars, Resources.Error); return; } } } } SchemaModel model = new SchemaModel(target); if (UserSchemaValidation.Launch(model, true) == DialogResult.Cancel) { return; } if (!new Api.Create(host, new CreateDataSourceInfo(cloudid, datasourcename, type, description).Serialize()).ExecuteLoggedIn(out string result)) { Useful.Error(Resources.CreateErrorText, Resources.Error); return; } int dsid = DataSources.Deserialize(result).collections.SelectMany(dsr => dsr.datasources).Single(dsi => dsi.datasourceName == datasourcename).datasourceId; if (!new Api.UpdateSchema(host, dsid, model).ExecuteLoggedIn(out result)) { Useful.Error(string.Format(Resources.UnableToUpdateRemoteSchema, result), Resources.Error); return; } if (!new Api.Post(host, dsid, target.ToCSV(), false).ExecuteLoggedIn(out result)) { Useful.Error(string.Format(Resources.PostErrorText, result), Resources.Error); return; } MessageBox.Show(Resources.CreateSuccess, Resources.Success); }