从存储过程中检索返回值

2024-04-10

我有一个存储过程,如下所示:

CREATE PROCEDURE procTest 
    -- Add the parameters for the stored procedure here
    @gameId int = NULL, 
    @memberID int = NULL,
    @mediatorID int = NULL,
    @id int OUTPUT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    INSERT INTO tblSiteChallengeMember (gameId, creatorId, mediatorId, completed, dateAdded) VALUES (@gameId, @memberId, @mediatorID, 0, GETDATE())
END
GO

我需要返回 IDtblSiteChallengeMember,但我不知道该怎么做。

我看过这个例子'在这附近 http://forums.asp.net/post/1987936.aspx,但我担心:

SELECT TOP 1 @ProductName=PRODUCTNAME, @Quantity =quantity 
FROM Products P, [Order Details] OD, Orders O, Customers C 
WHERE C.CustomerID = @CustomerID 
AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID

不起作用,因为单个用户可以输入多次,并且这些时间可能根本不唯一。

如何获取插入到 ASP.net 页面的最后一行的 ID?


将我的存储过程更新为:

ALTER PROCEDURE [dbo].[procCreateChallengeMember]
    -- Add the parameters for the stored procedure here
    @gameId int = NULL, 
    @memberID int = NULL,
    @mediatorID int = NULL,
    @id int OUTPUT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    INSERT INTO tblSiteChallengeMember (gameId, creatorId, mediatorId, completed, dateAdded) VALUES (@gameId, @memberId, @mediatorID, 0, GETDATE())

    SELECT @id = SCOPE_IDENTITY()
END

SQL表是:

GO

/****** Object:  Table [dbo].[tblSiteChallengeMember]    Script Date: 10/17/2012 08:05:12 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tblSiteChallengeMember](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [gameId] [int] NULL,
    [creatorId] [int] NOT NULL,
    [mediatorId] [int] NULL,
    [completed] [tinyint] NULL,
    [dateAdded] [datetime] NULL,
 CONSTRAINT [PK__tblSiteD__3213E83F628FA481] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

aspx.cs 是:

SqlConnection db = DataConn.SqlConnection();

db.Open();
SqlTransaction transaction = db.BeginTransaction();

try
{
    int id = 0;

    SqlCommand sqlComm =
            new SqlCommand(
                "procCreateChallengeMember @gameId, @creatorId, @mediatorId, @id", db, transaction) { CommandType = CommandType.Text };

    sqlComm.Parameters.Add(new SqlParameter("@gameId", SqlDbType.Int)).Value = 1;
    sqlComm.Parameters.Add(new SqlParameter("@creatorId", SqlDbType.Int)).Value = 1;
    sqlComm.Parameters.Add(new SqlParameter("@mediatorId", SqlDbType.Int)).Value = 1;
    SqlParameter param = new SqlParameter("@id", SqlDbType.Int)
        {
            Direction = ParameterDirection.Output
        };

    sqlComm.Parameters.Add(param);
    sqlComm.ExecuteNonQuery();

    //if(param.Value != DBNull.Value)
    //{
        id = Convert.ToInt32(param.Value);
        Response.Write("One: " + id + "<br/>");
    //}
    transaction.Commit();
    //Response.Write("Two: " + sqlComm.Parameters["expr"].Value + "<br/>");

}
catch (Exception ess)
{
    transaction.Rollback();
    Response.Write(ess.Message);
}

现在出现错误对象不能从 DBNull 转换为其他类型。(当我删除该 IF 语句时)


“如何获取插入到 ASP.net 页面的最后一行的 ID?”

SELECT @id = SCOPE_IDENTITY()

获取插入行以返回该行的存储过程。

EDIT

回应后续问题。

您需要让您的 SqlCommand 知道参数即将退出。

   // Just below where you added your other params
   SqlParameter outputParam = new SqlParameter("@id", SqlDbType.Int)
   { 
      Direction = ParameterDirection.Output 
   };

   sqlComm.Parameters.Add(outputParam);

   sqlComm.ExecuteNonQuery();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从存储过程中检索返回值 的相关文章

随机推荐

  • 如何从 Matlab 运行 Clojure

    如何从 matlab 运行 clojure 脚本 我尝试了以下操作 使用jdk 1 7运行matlab 然后调用java MATLAB JAVA usr lib jvm java 7 oracle jre matlab 在matlab中 设
  • Facebook 图表 API 已发送好友请求

    我需要使用图形 API 来找出我向多少人发送了好友请求并且该请求正在等待处理 是否可以使用 API 获取此信息 使用 FQL http developers facebook com docs reference fql friend re
  • Python 多处理,ValueError:对已关闭文件进行 I/O 操作

    我在使用 Python 多处理包时遇到问题 下面是一个简单的示例代码 说明了我的问题 import multiprocessing as mp import time def test file f f write Testing n pr
  • React Native如何在单击onPress时调用多个函数

    当我点击时我试图调用多个函数onPress using TouchableOpacity 例如 functionOne do something functionTwo do someting
  • 将 mySQL 查询转换为 Zend Framework 查询的工具

    是否有任何在线 Web 工具可以将 mySQL 查询转换为 Zend FrameWork 查询 也就是说 我输入 mySql 查询 然后工具将其转换为 Zend FrameWork 等效查询 您不需要为此使用工具 在 Zend Framew
  • 在多个 Flex 应用程序之间共享资源(图标/图像)的最佳方式是什么?

    我正在为我不久前创建的 Flex 应用程序创建一个新的 精简版 版本 我已经将许多类和组件移植到编译 SWC 文件的 Flex 库项目中 因为两者都是 Cairngorm 应用程序 所以我无法完全消除重复代码 但我应该能够共享资产 例如图标
  • 我想了解 jQuery 插件语法

    jQuery 站点列出了 jQuery 的基本插件语法 如下所示 function fn myPlugin function there s no need to do this because this is already a jque
  • 我如何在 Angular 8 的 AuthInterceptor 类中获取/使用 accessToken

    我如何在 Auth Interceptor 类中获取 使用访问令牌并将其添加到每个 API NetCore 调用中 我已经实施了 getAccessToken return Auth currentSession then res gt r
  • Visual Studio 2015 中代码契约的最佳替代方案是什么?

    我希望以尽可能最优雅的方式验证代码中的方法参数 代码契约在 2015 年似乎不起作用 有人使用任何替代方案吗 他们正在努力 https github com Microsoft CodeContracts pull 36 https git
  • 将工作分配给更多线程需要更多时间,为什么?

    我有一个小的 C 程序可以计算pi用一个蒙特卡洛 http en wikipedia org wiki Monte Carlo method Introduction 模拟基本上只是测试随机点 x y 是否在圆内部或外部 近似pi我必须使用
  • 崩溃日志:什么是“ARM 线程状态”

    我正在尝试分析 iPhone 崩溃报告 还有一些我不明白的事情 Thread 6 crashed with ARM Thread State r0 0x00000000 r1 0x00000000 r2 0x00000001 r3 0x00
  • Python:在迭代列表时删除列表元素[重复]

    这个问题在这里已经有答案了 我正在迭代 Python 中的元素列表 对其执行一些操作 然后在满足特定条件时将其删除 for element in somelist do action element if check element rem
  • Service Fabric 本地集群设置错误

    点击下面的链接来设置和运行本地集群 https learn microsoft com en us azure service fabric service fabric create your first application in v
  • 将 xsd:any 的类型限制为仅 xsd:string?

    所以我正在编写一个新的 XSD 但遇到了一个小问题 现在我承认我在这些方面并不是最好的 但我本以为我所做的应该有效 但事实并非如此 我所追求的是我有一个名为extraInfo该元素最多可以有 42 个子元素 其名称任意 但只能是字符串类型
  • 获取 UI 线程上的锁

    获取 UI 线程上的锁是一种不好的做法吗 例如 我有一个缓存对象 该对象正在被后台线程和 UI 线程修改 对缓存的任何修改都包含在锁内 伪代码如下 public class Cache private readonly Dictionary
  • 从未知维度的多维数组中获取元素

    如果我有一个 n 维数组 其中 n 在运行时之前是未知数 我如何索引该数组 ReDim indices 1 to n As Long array 1 2 3 data 1 2 3 n 3 data indices I want this 我
  • Java 是否有带有监听器的 Map 实现?

    我想要一个 Map 实现 在其中我可以添加 put 事件的侦听器 标准库或任何第三方库中有类似的东西吗 我不知道任何标准或第三方 但这很简单 只需创建一个包装另一个 Map 并实现 Map 接口的类 public class MapList
  • WPF 自动调整字体大小,直到适合父控件

    我有一个用户控件 其根元素是网格 我还有一个 ContentControl 用作加载数据时填充的某些文本的占位符 该控件可以在用户控件内移动 因此它的位置可以在任何地方 如果文本太长而无法放入用户控件的根网格中 我想减小 ContentCo
  • 从 python 中的字符串获取城市、州或邮政编码

    我希望能够从 python 中的字符串中解析出城市 州或邮政编码 所以 如果我输入 科罗拉多州博尔德 80303科罗拉多州博尔德博尔德 科罗拉多州 80303 这些的任何变化都会返回城市 州或邮政编码 这全部将是用户输入的数据并输入到一个文
  • 从存储过程中检索返回值

    我有一个存储过程 如下所示 CREATE PROCEDURE procTest Add the parameters for the stored procedure here gameId int NULL memberID int NU