【问题标题】:Stored procedure with 2 parameters [duplicate]具有2个参数的存储过程[重复]
【发布时间】:2013-07-15 15:21:32
【问题描述】:

我有一个带有 3 个参数的存储过程:我们称它们为 @a,@b,@c,它们都是可选的。

在存储过程中,它们是这样定义的:@a,@b,@c

根据我目前的研究,从 .NET 代码中我应该能够以任何顺序调用它们:

例如:

.Add(New OleDbParameter("@c", OleDbType.Integer, 4, ParameterDirection.Input, False, 0, 0, "c", DataRowVersion.Current, c))

.Add(New OleDbParameter("@a", OleDbType.Integer, 4, ParameterDirection.Input, False, 0, 0, "a", DataRowVersion.Current, a))

但是当我这样做时,存储过程仍然认为传递的第一个值是a,第二个值是c。

这里有什么问题?

【问题讨论】:

  • 您使用的是 SQL Server 还是其他一些 RDBMS?该问题被标记为sql-server,但我很困惑,因为我看到您使用的是OleDbParameter 对象。如果您使用的是 SQL Server,那么您应该改用优化的 SqlParameter 对象。
  • 是的,这是使用旧技术 OLe DB 的遗留代码
  • 所以如果你想以任何顺序使用参数,那么你需要切换到比OleDb更新的数据访问技术,但是如果你被OleDb卡住,那么你需要使顺序正确。
  • @KarlAnderson,我想知道你为什么不把这个作为答案。

标签: c# sql sql-server vb.net stored-procedures


【解决方案1】:

【讨论】:

  • 改用System.Data.SqlClient命名空间对象(SqlConnectionSqlCommandSqlParameter)。
  • 啊啊啊。 OleDB 是垃圾。
  • OleDb 是 1990 年代中期,而 ADO.NET 是 2002 年至今。
  • 是的,我现在的公司仍然坚持使用过时的垃圾代码。
【解决方案2】:

所以如果你想以任何顺序使用参数,那么你需要切换到比 OleDb 更新的数据访问技术,但如果你被 OleDb 卡住,那么你需要使顺序正确。

我认为普雷斯顿的回答就足够了,但我已经发布了这个答案。如果你觉得它更有帮助,那就接受吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2016-07-29
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多