35 private DatabaseSettings.DatabaseColumn lastDatabaseColumn {
get;
set; }
36 internal DatabaseSettings DatabaseSettings {
get;
set; }
38 public delegate
int CallOnError(GPALDatabase database);
49 public int Number {
get;
internal set; }
51 public string Message {
get;
internal set; }
53 public string Sql {
get;
internal set; }
55 public IGPALGrid<string>
Parameters {
get;
internal set; }
57 public int Row {
get;
internal set; } = -1;
59 public List<string>
RowValues {
get;
internal set; }
61 public DateTime
Occurred {
get;
internal set; }
74 return DatabaseSettings.LastError;
78 DatabaseSettings.LastError = value;
112 DatabaseSettings =
new DatabaseSettings(
this);
115 #region <Getters/Setters>
123 DatabaseSettings.Verb = DatabaseSettings.CrudVerb.Create;
128 public IAllowParametersAndInto Read
132 DatabaseSettings.Verb = DatabaseSettings.CrudVerb.Read;
137 public IAllowParametersAndUsing Update
141 DatabaseSettings.Verb = DatabaseSettings.CrudVerb.Update;
146 public IAllowParametersAndUsing Delete
150 DatabaseSettings.Verb = DatabaseSettings.CrudVerb.Delete;
162 DatabaseSettings.ParametersList?.Clear();
163 DatabaseSettings.ParametersGrid?.Clear();
178 return DatabaseSettings.Tokens;
182 DatabaseSettings.Tokens = value;
190 if (
null == DatabaseSettings.SqlTransaction)
194 DatabaseHelper.OpenConnection(DatabaseSettings);
195 DatabaseSettings.SqlTransaction = DatabaseSettings.Connection.BeginTransaction();
199 GPAL.PublishSimpleEvent(GPALEventType.EXCEPTION,
"ERROR beginning transaction",
this, Enums.GPALObjectType.Database, ex);
204 GPAL.PublishSimpleEvent(GPALEventType.WARNING,
"Already in a transaction. You cannot start a new transaction while in a transaction. Doing nothing.",
this, Enums.GPALObjectType.Database);
210 public IAllowDatabaseActions Rollback
214 DatabaseSettings.SqlTransaction?.Rollback();
215 DatabaseSettings.SqlTransaction =
null;
216 DatabaseHelper.CloseEverything(DatabaseSettings);
221 public IAllowDatabaseActions Commit
225 DatabaseSettings.SqlTransaction?.Commit();
226 DatabaseSettings.SqlTransaction =
null;
227 DatabaseHelper.CloseEverything(DatabaseSettings);
232 #endregion <Getters/Setters>
233 #region <Fluent Methods>
251 DatabaseSettings.ConnectionString = connectionString;
262 DatabaseSettings.UserName = username;
273 DatabaseSettings.Password = password;
283 DatabaseSettings.SqlCommand = sqlCommand;
293 DatabaseSettings.StoredProcedure = storedProcedure;
304 DatabaseSettings.ParameterNamesList.Add(parameterName);
315 DatabaseSettings.ParametersList.Add(parameter);
325 DatabaseSettings.ParametersGrid = parametersGrid;
331 DatabaseSettings.CreateSQL = sqlCommand;
337 DatabaseSettings.ReadSQL = sqlCommand;
341 public IAllowDatabaseSettings WithUpdateAs(
string sqlCommand)
343 DatabaseSettings.UpdateSQL = sqlCommand;
347 public IAllowDatabaseSettings WithDeleteAs(
string sqlCommand)
349 DatabaseSettings.DeleteSQL = sqlCommand;
372 DatabaseSettings.DatabaseType = databaseType;
393 DatabaseSettings.ServerName = serverName;
414 DatabaseSettings.DatabaseName = databaseName;
436 DatabaseSettings.TableName = tableName;
468 DatabaseSettings.CommandTimeoutSeconds = timeoutInSeconds;
479 DatabaseHelper.CloseEverything(DatabaseSettings);
488 DatabaseHelper.CloseEverything(DatabaseSettings);
493 DatabaseSettings.RowCount = rowCount;
497 #region <Output Column Settings [not yet implemented]>
505 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.DateTime);
506 lastDatabaseColumn = databaseColumn;
507 DatabaseSettings.ColumnList.Add(databaseColumn);
515 public IAllowDatabaseSettings WithTimeParameter(
string parameterName)
517 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Time);
518 lastDatabaseColumn = databaseColumn;
519 DatabaseSettings.ColumnList.Add(databaseColumn);
527 public IAllowDatabaseSettings WithTimestampParameter(
string parameterName)
529 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Timestamp);
530 lastDatabaseColumn = databaseColumn;
531 DatabaseSettings.ColumnList.Add(databaseColumn);
539 public IAllowPrecsionScaleAndSettings WithDecimalParameter(
string parameterName)
541 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Decimal);
542 lastDatabaseColumn = databaseColumn;
543 DatabaseSettings.ColumnList.Add(databaseColumn);
551 public IAllowDatabaseSettings WithFloatParameter(
string parameterName)
553 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Float);
554 lastDatabaseColumn = databaseColumn;
555 DatabaseSettings.ColumnList.Add(databaseColumn);
563 public IAllowDatabaseSettings WithImageParameter(
string parameterName)
565 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Image);
566 lastDatabaseColumn = databaseColumn;
567 DatabaseSettings.ColumnList.Add(databaseColumn);
575 public IAllowDatabaseSettings WithIntegerParameter(
string parameterName)
577 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Int);
578 lastDatabaseColumn = databaseColumn;
579 DatabaseSettings.ColumnList.Add(databaseColumn);
587 public IAllowDatabaseSettings WithMoneyParameter(
string parameterName)
589 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Money);
590 lastDatabaseColumn = databaseColumn;
591 DatabaseSettings.ColumnList.Add(databaseColumn);
599 public IAllowParameterLength WithCharParameter(
string parameterName)
601 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Char);
602 lastDatabaseColumn = databaseColumn;
603 DatabaseSettings.ColumnList.Add(databaseColumn);
611 public IAllowParameterLength WithNCharParameter(
string parameterName)
613 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.NChar);
614 lastDatabaseColumn = databaseColumn;
615 DatabaseSettings.ColumnList.Add(databaseColumn);
623 public IAllowParameterLength WithVarCharParameter(
string parameterName)
625 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.VarChar);
626 lastDatabaseColumn = databaseColumn;
627 DatabaseSettings.ColumnList.Add(databaseColumn);
635 public IAllowParameterLength WithNVarCharParameter(
string parameterName)
637 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.NVarChar);
638 lastDatabaseColumn = databaseColumn;
639 DatabaseSettings.ColumnList.Add(databaseColumn);
647 public IAllowParameterLength WithTextParameter(
string parameterName)
649 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Text);
650 lastDatabaseColumn = databaseColumn;
651 DatabaseSettings.ColumnList.Add(databaseColumn);
659 public IAllowParameterLength WithNTextParameter(
string parameterName)
661 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.NText);
662 lastDatabaseColumn = databaseColumn;
663 DatabaseSettings.ColumnList.Add(databaseColumn);
666 public IAllowDatabaseSettings WithParameterLength(
int length)
668 if (
true == NamedAColumn(
"length"))
669 lastDatabaseColumn.ColumnLength = length;
674 public IAllowPrecsionScaleAndSettings WithParameterPrecision(
int columnPrecision)
676 if (
true == NamedAColumn(
"precision"))
677 lastDatabaseColumn.ColumnPrecision = columnPrecision;
682 public IAllowPrecsionScaleAndSettings WithParameterScale(
int columnScale)
684 if (
true == NamedAColumn(
"scale"))
685 lastDatabaseColumn.ColumnScale = columnScale;
696 private bool NamedAColumn(
string setting)
698 bool retVal =
null != lastDatabaseColumn;
701 GPAL.PublishSimpleEvent(GPALEventType.ERROR,
702 $
"No parameter to set a {setting} on. Define one first, with .WithVarCharParameter, .WithDecimalParameter or another of the parameter calls",
703 this, GPALObjectType.Database);
708 public IAllowDatabaseSettings WithTableParameter(
string parameterName)
710 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, SqlDbType.Structured);
711 lastDatabaseColumn = databaseColumn;
712 DatabaseSettings.ColumnList.Add(databaseColumn);
715 public IAllowDatabaseSettings WithUDTTName(
string typeName)
717 if (lastDatabaseColumn ==
null)
719 GPAL.PublishSimpleEvent(GPALEventType.WARNING,
720 "No column defined before setting UDTT name. Call .WithTableParameter() first.",
721 this, GPALObjectType.Database);
724 if (lastDatabaseColumn.ColumnType != SqlDbType.Structured)
726 GPAL.PublishSimpleEvent(GPALEventType.WARNING,
727 $
"UDTT name specified for non-Structured column [{lastDatabaseColumn.ColumnName}]. Ignoring.",
728 this, GPALObjectType.Database);
730 lastDatabaseColumn.TvTableTypeName = typeName;
733 public IAllowDatabaseExecute Using(IGPALGrid<string> parametersGrid)
735 DatabaseSettings.ParametersGrid = parametersGrid;
739 public IAllowDatabaseExecute Using(DataTable dataTable)
741 IGPALGrid<string> parametersGrid = DatabaseHelper.DataTableToGrid(dataTable, out List<DatabaseSettings.DatabaseColumn> columns);
742 DatabaseSettings.ParametersGrid = parametersGrid;
743 DatabaseSettings.ColumnList = columns;
747 public IAllowDatabaseGridSettings SaveTo(out IGPALGrid<string> dataGrid)
749 DatabaseHelper.GetGrid(DatabaseSettings, out dataGrid);
755 rowCountsPerTable = DatabaseSettings.LastGridRowCountsPerTable ??
new List<int>();
761 DatabaseHelper.GetDataTable(DatabaseSettings, out dataTable);
767 DatabaseHelper.GetDataSet(DatabaseSettings, out dataSet);
787 DatabaseHelper.GetScalar(DatabaseSettings, out value);
793 rowCount = DatabaseHelper.ExecuteSQL(DatabaseSettings, DatabaseHelper.BuildWriteStatement(DatabaseSettings), ParameterTokens());
799 DatabaseHelper.ExecuteSQL(DatabaseSettings, DatabaseHelper.BuildWriteStatement(DatabaseSettings), ParameterTokens(), out rowCountsPerStatement);
810 private IGPALGrid<string> ParameterTokens()
812 IGPALGrid<string> retVal = DatabaseSettings.ParametersGrid;
814 if (
null == retVal || 0 == retVal.Rows)
817 Tokens.AddRow(DatabaseSettings.ParametersList);
825 public IAllowDatabaseSettings WithErrorCallback(GPALDatabase.CallOnError callOnError)
827 DatabaseSettings.CallOnErrorHandler = callOnError;
830 #endregion <Output Column Settings [saving not yet implemented]>
831 #endregion <Fluent Methods>