在SQL Server中使用C#类/结构

时间:2016-09-12 18:36:52

标签: c# sql .net sql-server clr

有什么方法可以在SQL Server存储过程中声明.Net类或结构的实例和/或将它们用作函数中的参数?

我有一个.Net方法,它接受我的public class UnitOfMeasure { public static UnitOfMeasure Gram {get;} = new UnitOfMeasure("gram","g",UnitType.Mass, 0.001, 0); public static UnitOfMeasure Kilogram {get;} = new UnitOfMeasure("kilogram","kg",UnitType.Mass,1,0); ... public static IEnumerable<UnitOfMeasure> NamedUnits {get;} = new List<UnitOfMeasure>(){Gram, Kilogram, ...}; public string Name {get; private set;} public string Symbol {get; private set; } public UnitType {get; private set;} public double StandardUnits {get; private set} public double StandardOffset {get; private set} public UnitOfMeasure(string name, string symbol, UnitType type, double standardUnits, double standardOffset) { ... } public static double? Convert(UnitOfMeasure fromUnit, UnitOfMeasure toUnit, double? value) { double? standardvalue = (value * fromUnit.StandardUnits) + fromUnit.StandardOffset; double ret = (standardvalue - toUnit.StandardOffset)/ toUnit.StandardUnits; return ret; } public static double Convert(string fromUnit, string toUnit, double? value) { var unit1 = NamedUnits.Single(unit => unit.Name == fromUnit); var unit2 = NamedUnits.Single(unit => unit.Name == toUnit); return Convert(unit1, unit2, value); } } 类的两个实例,并将值从一个单位转换为另一个单位。

我的.Net类看起来如下所示。为了简洁起见,我省略了很多代码......

 udf_ConvertUnits('gram', 'kilogram', 200); //returns 0.2

我已经能够将我的转换(按名称)方法映射到我的数据库中的UDF,但它仅适用于从/向我/'34;命名单位&#34中的单位转换时;采集。

 declare @USD = CreateUnit('US Dollar', 'USD', 'Currency', 100, 0);
 declare @EUR = CreateUnit('Euro', 'EUR', 'Currency', 88.9, 0);

 udf_ConvertCustomUnits(@USD, @EUR, 200); // returns 177.8

我希望能够在SQL中定义自定义单位并在它们之间进行转换......

{{1}}

0 个答案:

没有答案