当 SQL Server CLR UDT 设置为一个值时,该值(作为字符串)在内部传递给该Parse()
方法,该方法应该返回 UDT 的一个实例,该实例设置为传入的字符串值根据该值转换为的任何值类型的逻辑。到目前为止很好,当输入完全有效时效果很好。
但是,如果传递给它的字符串表示无法根据类型定义的业务规则进行解析,Parse() 应该怎么做?
作为一个例子,假设我有一个代表一本书的 ISBN 的类型(我说这只是一个例子)。知道 ISBN 是 9 位后跟 1 位校验位,或者“978”后跟 9 位后跟一位校验位,因此很容易定义构成有效 ISBN 的业务规则。一个业务要求是系统只能处理有效的 ISBN——任何无效的都应该立即引发错误(并且系统以前不是为此而构建的;它曾经允许任何唯一且非 NULL 的内容进入 ISBN 字段,现在正在收紧)。如果有人输入了一个不是有效 ISBN 的字符串,那么在 Parse() 中采取的适当操作是什么?
我尝试抛出一个ArgumentException
,但这会对数据库逻辑的其他部分造成严重破坏,并最终由于未处理的Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements.
错误而导致应用程序停止运行。似乎必须有比这更好的方法。