May DbDataReader.GetValue()返回特定于提供者的数据类型?

时间:2018-01-30 16:19:40

标签: .net ado hana

请告诉我,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添加类型访问器。例如,您可以添加DecimalGetMyStructure等。一个例子是SQL Server的.NET Framework数据提供程序,它使用System.Data.SqlTypes命名空间公开专有类型。 GetMyTimeStamp然后使用强类型访问器方法将这些类型公开为SqlDataReader。例如:SqlTypeGetSqlBinaryGetSqlDateTime等。

也就是说,不是从泛型方法返回自定义数据类型,而是建议实现强类型访问器,尽管 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 的一般要求?

0 个答案:

没有答案