请告诉我,ADO.NET
的通用System.Data.Common
接口是否只需返回原生.NET
类型?具体来说,我指的是DbDataReader.GetValue()
和DbCommand.ExecuteScalar()
的返回类型。
我的问题是,在 SAP HANA ADO.NET Provider (Sap.Data.Hana.dll
)中,这些方法有时会返回 HANA 特定类型,例如{{1}而不是HanaDecimal
。我了解到,如果System.Decimal
具有更大的幅度,可能并不总是表示为HanaDecimal
,但这种情况相对较少,并且 ADO 具有special provision:
如果.NET Framework数据提供程序具有无法充分公开为.NET Framework类型的专有类型,则可以扩展接口以支持专有类型,然后为返回专有类型的DataReader添加类型访问器。例如,您可以添加
Decimal
,GetMyStructure
等。一个例子是SQL Server的.NET Framework数据提供程序,它使用System.Data.SqlTypes命名空间公开专有类型。GetMyTimeStamp
然后使用强类型访问器方法将这些类型公开为SqlDataReader
。例如:SqlType
,GetSqlBinary
,GetSqlDateTime
等。
也就是说,不是从泛型方法返回自定义数据类型,而是建议实现强类型访问器,尽管 HANA 提供程序具有此类访问器,但它仍然返回自定义数据类型来自其弱类型的访问者。
另外,根据Data Type Mappings in ADO.NET,
这意味着当DataAdapter使用数据源中的值填充DataSet中的DataTable时,DataTable中列的结果数据类型是.NET Framework类型,而不是特定于.NET Framework数据提供程序的类型。用于连接数据源。
同样,当DataReader从数据源返回值时,结果值将存储在具有.NET Framework类型的本地变量中。对于DataAdapter的Fill操作和DataReader的Get方法,.NET Framework类型是从.NET Framework数据提供程序返回的值推断出来的。
由于GetSqlDecimal
不是.NET Framework类型, HANA ADO.NET Provider 是否违反了 ADO.NET 的一般要求?