【发布时间】:2010-01-06 04:22:19
【问题描述】:
我已经根据 Castle Project 的 ActiveRecord 实现无耻地创建了一个数据访问层。为了获得认可,它必须支持我的组织使用的大量存储过程库,这些存储过程已被编写为使用可以想象的每个输入/输出结构,包括每个可能的数据类型的返回值和输出参数。
我的问题在于开发将输出参数添加到用于执行存储过程的 Command 对象的参数集合的代码。现在我只是使用一个很大的默认值,希望它足以捕获所有情况,但这感觉很粗制滥造。
如何提前知道输出参数的长度?
这是我的 DAL 类,使用属性来表示输出参数:
[StoredProcedure("usp_PostARTransaction", OperationType.Insert)]
public class ARTranPost : DataObjectBase<ARTranPost>
{
[StoredProcedureParameter("sARTranID",OperationType.Insert,ParameterDirection.Output)]
public string ARTranID {get;set;}
[StoredProcedureParameter("sDueDate", OperationType.Insert, ParameterDirection.Input)]
public string DueDate { get; set; }
[StoredProcedureParameter("sPostDate", OperationType.Insert, ParameterDirection.Input)]
public string PostDate { get; set; }
}
是否需要使用 SMO 或其他库从数据库中获取长度?
【问题讨论】:
-
当然,您可以获得列的长度,但这并不能告诉您访问表的存储过程将带回什么。 SP 可以从一个或二十个表中获取列信息,将它们连接起来,截断它们,或者替换它自己的值。没有办法根据表格来预测这一点。你必须知道 SP 发回了什么。
标签: c# sql-server stored-procedures ado.net parameters