Files
2026-04-17 14:55:32 -04:00

5.1 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/DASFactoryDb/Config/Config.cs
2026-04-16T03:52:17.979930+00:00 Qwen/Qwen3-Coder-Next-FP8 1 609ad832d02ccb50

Config

Documentation: DASFactoryDb.Config.Config Module


1. Purpose

This module provides a thin, static wrapper around three SQL Server stored procedures (sp_DASInfoInsert, sp_DASInfoClear, and sp_ConfigDataSet) for managing DAS (Data Acquisition System) device metadata and configuration in the DASFactoryDb database. It abstracts low-level ADO.NET operations—including parameter binding, null handling, and error propagation—into strongly-typed C# methods. Its role is to ensure consistent, validated data persistence for DAS device information (e.g., MAC address, module limits, battery, calibration) and XML-based configuration blobs.


2. Public Interface

int DASInfoInsert(int iDASRecordId, string macAddress, int owningDASId, uint maxNumberOfModules, ulong? maxEventStorageSpaceInBytes, ulong? numberOfBytesPerSampleClock, string batteryId, DateTime? calibrationDate)

  • Behavior: Inserts or updates DAS device metadata by calling the sp_DASInfoInsert stored procedure. Returns the ID of the inserted/updated record (via @new_id output parameter).
  • Null/Default Handling:
    • macAddressstring.Empty if null.
    • maxEventStorageSpaceInBytes, numberOfBytesPerSampleClock0 if null.
    • calibrationDateSqlDateTime.MinValue if null or less than SqlDateTime.MinValue.
  • Error Handling: Delegates to DbWrapper.ProcessReturn after execution; throws on non-zero @errorNumber.

void DASInfoClear(int iDASRecordId)

  • Behavior: Clears DAS device metadata by calling sp_DASInfoClear. Does nothing if DbWrapper.Connected is false.
  • Note: No return value; errors are propagated via DbWrapper.ProcessReturn.

void SetConfiguration(int iDASRecordId, string xml, int fileStore)

  • Behavior: Stores XML configuration data as UTF-8 encoded binary (VarBinary) by calling sp_ConfigDataSet. Returns the new configuration record ID via @new_id (not exposed in return value).
  • Null/Default Handling: No explicit null checks on xml; passes raw bytes (including nullDBNull.Value behavior depends on SqlParameter handling).
  • Error Handling: Same as above; skips execution if not connected.

3. Invariants

  • Connection State: DASInfoClear and SetConfiguration silently exit if DbWrapper.Connected == false. DASInfoInsert does not check connection state and will attempt execution regardless.
  • Parameter Validation:
    • maxNumberOfModules is bound as SqlDbType.Int despite being uint; potential overflow if > int.MaxValue.
    • maxEventStorageSpaceInBytes and numberOfBytesPerSampleClock are ulong? but bound as SqlDbType.Int; values > int.MaxValue will overflow silently (to negative or truncated values).
  • Date Handling: calibrationDate is clamped to SqlDateTime.MinValue (1753-01-01) if below it; DateTime.MinValue (0001-01-01) is converted to this minimum.
  • Error Propagation: All methods rely on DbWrapper.ProcessReturn to interpret @errorNumber and @errorMessage; non-zero @errorNumber likely throws an exception (behavior depends on DbWrapper.ProcessReturn implementation, not visible here).

4. Dependencies

  • Internal Dependencies:
    • DbWrapper (static class): Provides GetDASFactoryCommand(), Connected property, and ProcessReturn(SqlParameter, SqlParameter).
    • System.Data, System.Data.SqlClient, System.Text: For ADO.NET types and UTF-8 encoding.
  • External Dependencies:
    • SQL Server database with stored procedures:
      • sp_DASInfoInsert
      • sp_DASInfoClear
      • sp_ConfigDataSet
    • Assumed schema: Tables/columns matching parameter names (e.g., @IDASCommunicationRecordId, @ConfigurationData, @ConfigStore).

5. Gotchas

  • Silent Data Truncation: maxEventStorageSpaceInBytes and numberOfBytesPerSampleClock (ulong?) are cast to int (via SqlDbType.Int). Values > 2,147,483,647 will overflow or wrap, causing incorrect data.
  • No Connection Guard in DASInfoInsert: Unlike DASInfoClear/SetConfiguration, this method proceeds even if DbWrapper.Connected == false, risking runtime exceptions.
  • macAddress Null Handling: Converts null to string.Empty before binding, which may mask missing data (e.g., DB might accept empty string as valid).
  • xml Parameter: No validation or encoding checks; malformed XML or non-UTF-8 data could cause DB errors.
  • Resource Management: cmd.Connection.Dispose() in finally blocks may conflict with DbWrappers connection lifecycle if it manages pooled connections.
  • Missing Return Value: SetConfiguration retrieves @new_id but discards it; callers cannot confirm the inserted ID.
  • No Timeout Configuration: Command timeout defaults to DbWrappers implementation (not specified here).

None identified beyond these.