Telerik OpenAccess Classic

Telerik OpenAccess ORM Send comments on this topic.
Behavior for non-storable values
Programmer's Guide > OpenAccess ORM Classic (Old API) > Programming With OpenAccess > Low-level Driver > Behavior for non-storable values

Glossary Item Box

This documentation article is a legacy resource describing the functionality of the deprecated OpenAccess Classic only. The contemporary documentation of Telerik OpenAccess ORM is available here.

If values to be stored are illegal for a particular backend, then it depends on the driver (and mapping) how the error is handled, Telerik OpenAccess ORM does not provide uniform error handling.

Specifically, the genericADO2 driver while using the SqlClient uses the mapping information for variable-length columns when preparing SqlCommands. This is because the SqlClient requires Size, Length, and Scale information during Prepare(), unlike all other drivers.

This can lead to different error behaviors, if the mapping information and the database schema are inconsistent (should not occur if the updateDatabase property is set to true).

For e.g. if a VARCHAR column allows 255 characters, but the mapping information states 100 characters and the user attempts to store a 150 character string.

If strings are too long for a column, then either an exception will be thrown or the value will be truncated.

Unicode values might get corrupted, if the column the value is stored in does not support Unicode.

DATETIME values are possibly rounded into the internal database format.

In case of MySQL, DATETIME values such as "0000-00-00 00:00:00" (and DATE values such as "0000-00-00") are allowed., i.e. when a new object of the DATETIME is created it is stored with this values, or any illegal DATETIME, DATE, or TIMESTAMP values are converted to the “zero” value of the appropriate type. However, these values are not supported in the .NET environment, therefore in such a case, the DATETIME will be read and stored as "0001-01-01 00:00:00" (and DATE as "0001-01-01"). While updating such a "0000-00-00" value, the update might fail when "changed" checking is used for concurrency control (Refer to Concurrency Control Verify Method for more information).

In case of the Advantage Database Server, System.Int32.MinValue and System.Int16.MinValue values are treated as null values by the server.

Floating point numbers are possibly rounded into the internal database format.

As of Oracle 10g the new types BINARY_DOUBLE and BINARY_FLOAT are available, that overcome many (but not all) of the limitations for floating point numbers.

Exceptions might be thrown, if a value is out-of-range (e.g. if a DateTime before January, 1st 1753 is stored in SQL Server, or Double.MaxValue is stored in a NUMBER column in Oracle.). Telerik OpenAccess ORM assumes the underlying transaction to be still active after attempting to store illegal values and OpenAccess ORM will in turn rollback the transaction, if the driver throws an exception. Firebird does not support unsigned 64 bit integers and therefore UInt64 can only support values 0...System.Int64.MaxValue.