c# - 如何确定 C# 数据访问层中存储过程输出参数的大小属性

标签 c# sql-server stored-procedures ado.net parameters

我已经根据 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 或其他库来从数据库获取长度吗?

最佳答案

如果您使用 SQL Server(OP 中未指定),则可以使用 sysobjects 和 syscolumns 目录 View 来检索存储过程及其参数:

SELECT p.name, t.name, c.*
FROM sysobjects p
INNER JOIN syscolumns c ON p.id = c.id
INNER JOIN systypes t on c.xusertype = t.xusertype
WHERE p.type = 'P'
AND p.name NOT LIKE 'dt[_]%'
ORDER BY p.name, c.colid

(在 SQL2005+ 中使用 sys.objects、sys.types 和 sys.columns,但旧的 View 仍然存在)

这将为您提供 SP 名称、类型名称、参数名称、长度和输入/输出方向 (c.isoutparam)。

我在我的博客上写道generating SP access for C# 。我没有在那里介绍 OUT 参数,但调整代码以输出参数应该很简单。

关于c# - 如何确定 C# 数据访问层中存储过程输出参数的大小属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395580/

相关文章:

php - 将表作为变量传递以在 mysql 存储过程中循环

sql-server - 以编程方式检索与 SQL Server Management Studio gui 返回的源相同的 SQL Server 存储过程源?

c# - 我正在将我的 EF linq 查询更改为存储过程。有没有一种简单的方法来设置复杂的映射?

c# - NServicebus - 一个端点多个处理程序线程

c# - 编码 CDATA 元素的有效方法

sql - MS SQL 如何从表中选择 n 行,即使表有 n - x 行

java - 参数值 [0] 与预期类型 [java.lang.Integer] 不匹配

c# - 无法从 docker 上运行的 .net 核心应用程序连接到 SQL Server express

sql - 检查 SQL Server 上的常用密码

sql-server - Silverlight 应用程序中的压力测试,它使用来自 WCF DataService 的数据,然后公开来自 SQLServer 数据库的数据