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;
89 DatabaseSettings =
new DatabaseSettings(
this);
92 #region <Getters/Setters>
93 public IAllowParametersAndUsing Create
97 DatabaseSettings.SqlCommand = DatabaseSettings.CreateSQL;
101 public IAllowParametersAndInto Read
105 DatabaseSettings.SqlCommand = DatabaseSettings.ReadSQL;
109 public IAllowParametersAndUsing Update
113 DatabaseSettings.SqlCommand = DatabaseSettings.UpdateSQL;
117 public IAllowParametersAndUsing Delete
121 DatabaseSettings.SqlCommand = DatabaseSettings.DeleteSQL;
132 DatabaseSettings.ParametersList?.Clear();
133 DatabaseSettings.ParametersGrid?.Clear();
148 return DatabaseSettings.Tokens;
152 DatabaseSettings.Tokens = value;
160 if (
null == DatabaseSettings.SqlTransaction)
164 DatabaseHelper.OpenConnection(DatabaseSettings);
165 DatabaseSettings.SqlTransaction = DatabaseSettings.Connection.BeginTransaction();
169 GPAL.PublishSimpleEvent(GPALEventType.EXCEPTION,
"ERROR beginning transaction",
this, Enums.GPALObjectType.Database, ex);
174 GPAL.PublishSimpleEvent(GPALEventType.WARNING,
"Already in a transaction. You cannot start a new transaction while in a transaction. Doing nothing.",
this, Enums.GPALObjectType.Database);
180 public IAllowDatabaseActions Rollback
184 DatabaseSettings.SqlTransaction?.Rollback();
185 DatabaseSettings.SqlTransaction =
null;
190 public IAllowDatabaseActions Commit
194 DatabaseSettings.SqlTransaction?.Commit();
195 DatabaseSettings.SqlTransaction =
null;
200 #endregion <Getters/Setters>
201 #region <Fluent Methods>
219 DatabaseSettings.ConnectionString = connectionString;
230 DatabaseSettings.UserName = username;
241 DatabaseSettings.Password = password;
251 DatabaseSettings.SqlCommand = sqlCommand;
261 DatabaseSettings.StoredProcedure = storedProcedure;
272 DatabaseSettings.ParameterNamesList.Add(parameterName);
283 DatabaseSettings.ParametersList.Add(parameter);
293 DatabaseSettings.ParametersGrid = parametersGrid;
299 DatabaseSettings.CreateSQL = sqlCommand;
305 DatabaseSettings.ReadSQL = sqlCommand;
309 public IAllowDatabaseSettings WithUpdateAs(
string sqlCommand)
311 DatabaseSettings.UpdateSQL = sqlCommand;
315 public IAllowDatabaseSettings WithDeleteAs(
string sqlCommand)
317 DatabaseSettings.DeleteSQL = sqlCommand;
340 DatabaseSettings.DatabaseType = databaseType;
361 DatabaseSettings.ServerName = serverName;
382 DatabaseSettings.DatabaseName = databaseName;
404 DatabaseSettings.TableName = tableName;
436 DatabaseSettings.CommandTimeoutSeconds = timeoutInSeconds;
447 DatabaseHelper.CloseEverything(DatabaseSettings);
456 DatabaseHelper.CloseEverything(DatabaseSettings);
461 DatabaseSettings.RowCount = rowCount;
465 #region <Output Column Settings [not yet implemented]>
473 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.DateTime);
474 DatabaseSettings.ColumnList.Add(databaseColumn);
482 public IAllowDatabaseSettings WithTimeParameter(
string parameterName)
484 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Time);
485 DatabaseSettings.ColumnList.Add(databaseColumn);
493 public IAllowDatabaseSettings WithTimestampParameter(
string parameterName)
495 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Timestamp);
496 DatabaseSettings.ColumnList.Add(databaseColumn);
504 public IAllowPrecsionScaleAndSettings WithDecimalParameter(
string parameterName)
506 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Decimal);
507 DatabaseSettings.ColumnList.Add(databaseColumn);
515 public IAllowDatabaseSettings WithFloatParameter(
string parameterName)
517 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Float);
518 DatabaseSettings.ColumnList.Add(databaseColumn);
526 public IAllowDatabaseSettings WithImageParameter(
string parameterName)
528 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Image);
529 DatabaseSettings.ColumnList.Add(databaseColumn);
537 public IAllowDatabaseSettings WithIntegerParameter(
string parameterName)
539 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Int);
540 DatabaseSettings.ColumnList.Add(databaseColumn);
548 public IAllowDatabaseSettings WithMoneyParameter(
string parameterName)
550 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Money);
551 DatabaseSettings.ColumnList.Add(databaseColumn);
559 public IAllowParameterLength WithCharParameter(
string parameterName)
561 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Char);
562 lastDatabaseColumn = databaseColumn;
563 DatabaseSettings.ColumnList.Add(databaseColumn);
571 public IAllowParameterLength WithNCharParameter(
string parameterName)
573 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.NChar);
574 lastDatabaseColumn = databaseColumn;
575 DatabaseSettings.ColumnList.Add(databaseColumn);
583 public IAllowParameterLength WithVarCharParameter(
string parameterName)
585 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.VarChar);
586 lastDatabaseColumn = databaseColumn;
587 DatabaseSettings.ColumnList.Add(databaseColumn);
595 public IAllowParameterLength WithNVarCharParameter(
string parameterName)
597 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.NVarChar);
598 lastDatabaseColumn = databaseColumn;
599 DatabaseSettings.ColumnList.Add(databaseColumn);
607 public IAllowParameterLength WithTextParameter(
string parameterName)
609 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.Text);
610 lastDatabaseColumn = databaseColumn;
611 DatabaseSettings.ColumnList.Add(databaseColumn);
619 public IAllowParameterLength WithNTextParameter(
string parameterName)
621 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, System.Data.SqlDbType.NText);
622 lastDatabaseColumn = databaseColumn;
623 DatabaseSettings.ColumnList.Add(databaseColumn);
626 public IAllowDatabaseSettings WithParameterLength(
int length)
628 lastDatabaseColumn.ColumnLength = length;
632 public IAllowPrecsionScaleAndSettings WithParameterPrecision(
int columnPrecision)
634 lastDatabaseColumn.ColumnPrecision = columnPrecision;
638 public IAllowPrecsionScaleAndSettings WithParameterScale(
int columnScale)
640 lastDatabaseColumn.ColumnScale = columnScale;
644 public IAllowDatabaseSettings WithTableParameter(
string parameterName)
646 DatabaseSettings.DatabaseColumn databaseColumn =
new DatabaseSettings.DatabaseColumn(parameterName, SqlDbType.Structured);
647 lastDatabaseColumn = databaseColumn;
648 DatabaseSettings.ColumnList.Add(databaseColumn);
651 public IAllowDatabaseSettings WithUDTTName(
string typeName)
653 if (lastDatabaseColumn ==
null)
655 GPAL.PublishSimpleEvent(GPALEventType.WARNING,
656 "No column defined before setting UDTT name. Call .WithTableParameter() first.",
657 this, GPALObjectType.Database);
660 if (lastDatabaseColumn.ColumnType != SqlDbType.Structured)
662 GPAL.PublishSimpleEvent(GPALEventType.WARNING,
663 $
"UDTT name specified for non-Structured column [{lastDatabaseColumn.ColumName}]. Ignoring.",
664 this, GPALObjectType.Database);
666 lastDatabaseColumn.TvTableTypeName = typeName;
669 public IAllowDatabaseExecute Using(IGPALGrid<string> parametersGrid)
671 DatabaseSettings.ParametersGrid = parametersGrid;
675 public IAllowDatabaseExecute Using(DataTable dataTable)
677 IGPALGrid<string> parametersGrid = DatabaseHelper.DataTableToGrid(dataTable, out List<DatabaseSettings.DatabaseColumn> columns);
678 DatabaseSettings.ParametersGrid = parametersGrid;
679 DatabaseSettings.ColumnList = columns;
683 public IAllowDatabaseGridSettings SaveTo(out IGPALGrid<string> dataGrid)
685 DatabaseHelper.GetGrid(DatabaseSettings, out dataGrid);
691 rowCountsPerTable = DatabaseSettings.LastGridRowCountsPerTable ??
new List<int>();
697 DatabaseHelper.GetDataTable(DatabaseSettings, out dataTable);
703 DatabaseHelper.GetDataSet(DatabaseSettings, out dataSet);
723 DatabaseHelper.GetScalar(DatabaseSettings, out value);
729 rowCount = DatabaseHelper.ExecuteSQL(DatabaseSettings, DatabaseSettings.SqlCommand, ParameterTokens());
735 DatabaseHelper.ExecuteSQL(DatabaseSettings, DatabaseSettings.SqlCommand, ParameterTokens(), out rowCountsPerStatement);
746 private IGPALGrid<string> ParameterTokens()
748 IGPALGrid<string> retVal = DatabaseSettings.ParametersGrid;
750 if (
null == retVal || 0 == retVal.Rows)
753 Tokens.AddRow(DatabaseSettings.ParametersList);
761 public IAllowDatabaseSettings WithErrorCallback(GPALDatabase.CallOnError callOnError)
763 DatabaseSettings.CallOnErrorHandler = callOnError;
766 #endregion <Output Column Settings [saving not yet implemented]>
767 #endregion <Fluent Methods>