T-SQL:将新的 INSERT 标识返回给 C#

2023-12-14

我使用存储过程将值放入 SQL Server。该过程将向所添加的行添加一个 ID。我需要将此 ID 返回到我的代码中。

目前我可以在 Visual Studio 的 OUTPUT 窗口中看到输出 id,但似乎无法在我的代码中捕获它。这是该过程的摘要版本:

SQL:

CREATE PROCEDURE dbo.DoSomething
(
    @var1 INT = NULL,
    @var2 INT = NULL,
    @var3 DATE = NULL
)
AS

BEGIN

    INSERT INTO atable
    (
        vara,
        varb,
        varc
    )
    VALUES
    (
        @var1,
        @var2,
        @var3
    )

    RETURN SCOPE_IDENTITY()

END

C#:

int result = 0;

/// create command
SqlCommand cmd = new SqlCommand("DoSomething", this.OpenSqlConnection());
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@var1", thing.value1);
cmd.Parameters.AddWithValue("@var2", thing.value2);
cmd.Parameters.AddWithValue("@var3", thing.value3);


/// send data to db
result = (int)cmd.ExecuteScalar();

所以我收到一个错误:你调用的对象是空的。当它到达 (int)cmd.ExecuteScalar() 时。

有任何想法吗?


...
SELECT SCOPE_IDENTITY()

RETURN 值实际上作为特殊的 OUTPUT 参数返回。 SELECT 给出 ExecuteScalar 的结果集。

您可以使用OUTPUT子句也代替单独的 SELECT:

...
AS
BEGIN
    INSERT INTO atable
    (
        vara,
        varb,
        varc
    )
    OUTPUT INSERTED.IDCol
    VALUES
    (
        @var1,
        @var2,
        @var3
    )
END
GO

这也适用于多行。

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

T-SQL:将新的 INSERT 标识返回给 C# 的相关文章

随机推荐

  • Selenium webdriver (javascript) 选项卡输出

    填写表格时 测试需要按选项卡才能转到下一个字段 我得到的错误是 InvalidArgumentError Not a modifier key Code var key require selenium webdriver Key var
  • 未设置带有或带有块的对象变量

    我有一个正在尝试解析的 xml 文件 这是xml文件内容
  • 获取 DOM 节点的字符串表示形式

    Javascript 我有一个节点 元素或文档 的 DOM 表示 我正在寻找它的字符串表示 例如 var el document createElement p el appendChild document createTextNode
  • 如何使用 socket.io 存储来自特定用户的套接字资源?

    我正在设计一个聊天脚本 我使用不同的浏览器在我的机器上测试它 我正在尝试使用 socket io 向特定用户发送消息 所以这里是 client socket on msgFromServer function data message da
  • 在使用 PHP 和 AJAX 执行期间终止 MySQL 查询

    我正在创建一个自定义查询生成器 当用户创建查询时 他可以通过单击按钮来验证查询语法 当用户单击按钮进行验证时 AJAX 调用将发送到服务器 并开始执行查询 在此期间 用户可以在屏幕上看到带有取消按钮的模式 如果用户有任何机会单击取消按钮 我
  • tableView.cellForRowAtIndexPath 返回 nil 单元格过多(快速)

    所以我有最奇怪的事情 我正在循环 tableView 以迭代所有单元格 对于少于 5 个单元 它可以正常工作 但是对于更多单元 它会崩溃并显示 意外发现 nil 这是代码 for section in 0
  • Qt:meta.enumeratorCount() 没有为 Q_OBJECT 中的枚举提供元数据,为什么?

    我有以下课程 我尝试获取一些元数据enum MyEnum 然而 当循环结束时meta enumeratorCount 它的计数始终为 0 基本上我在关注这个例子在这里 为了找到问题 我也尝试了同样的方法 同样的问题 方法计数 0 代码编译
  • 从一列中的唯一值创建 Pandas 数据框

    我有一个包含 1000 行的 Pandas 数据框 它有Names列包括客户名称及其记录 我想根据每个客户的唯一名称为他们创建单独的数据框 我将唯一的名称放入列表中 customerNames DataFrame customer name
  • Google Slides API,能够使用十六进制设置颜色吗?

    是否可以使用十六进制格式设置元素形状背景颜色 例如 B6D7A8 我在这里看到一个例子 Google Slides API 如何更改特定颜色的所有形状的文本颜色 然而 Google Slide API 参考并没有提及它 我想确定一下 特别是
  • MIME 类型“image/jpg”与“image/jpeg”相同吗?

    很简单的问题 但似乎无法在网上找到它 我正在尝试制作一个程序 根据文件类型会给我扩展名 No image jpg不等于image jpeg 你应该使用image jpeg Only image jpeg被识别为 JPEG 文件的实际 mim
  • 是否有主日期时间模式适用于每个类似的日期时间模式

    我的消费者收到的时间格式是String有价值20 5 14 9 22 25 or 20 5 14 9 22 5 or 20 5 14 12 22 25 or 20 10 14 9 2 25 etc 以上所有内容都有非常不同的日期时间模式yy
  • struts 2中的多个文件上传

    我在使用struts2上传文件时遇到问题 我有多个文件标签 例如
  • 如何在matlab中用scatter3图在同一图中绘制等值面?

    我有一个 3D 体积和一个 3D 点云 我怎样才能绘制点云以及isosurface体积 而不覆盖散点图 使用patch绘制等值面总是会擦掉scatter3 plot 有些事情要尝试 首先绘制使用补丁的表面 h patch 然后设置hold
  • 无法连接 Websphere MQ 队列管理器

    我是 WebSphere MQ 的初学者 我正在研究 MQ 6 并且它工作正常 但现在我已经安装了 MQ 7 1 当我尝试创建一个新的队列管理器时 我可以做到 但它无法连接并且它给了我以下错误 你对此有什么想法吗 谢谢 如果使用以下命令安装
  • Linq 获取高于姓氏的项目

    问候 我正在尝试找到一种使用 Linq to SQL 来获取姓氏高于 Jan 的前 15 条记录的方法 当我在 SQL 中使用它时 我得到了姓氏以字母顺序高于 Jan 的任何字母开头的每个成员 然而使用query Where m gt m
  • Python Numpy 累积/差异[重复]

    这个问题在这里已经有答案了 我希望扭转 numpy 的 cumsum 函数的效果 即累积 运行总计 查看下面的代码 我将数字 1 到 10 分配给 a 将这些数字的运行总和分配给 b 我需要反转这个过程 即从b计算a 我可以对此进行编码 参
  • 计算本地存储空间的使用情况

    我正在使用 Bespin 编辑器和 HTML5 的 localStorage 创建一个应用程序 它在本地存储所有文件并帮助语法 使用 JSLint 和其他一些 CSS 和 HTML 解析器来帮助用户 我想计算已使用了多少 localStor
  • 在 C# 中从外部应用程序获取 UI 文本

    是否可以从 C 中的外部应用程序获取 UI 文本 特别是 有没有办法从第三方编写的外部 Win32 应用程序的标签 我假设它是普通的 Windows 标签控件 读取 Unicode 文本 文本可见 但无法在 UI 中通过鼠标选择 我假设有一
  • JodaTime - 检查 LocalTime 是否在现在之后以及现在在另一个 LocalTime 之前

    我正在尝试检查当前时间是否是在开始之后LocalTime在另一个终点之前LocalTime即开始时间加上 11 小时 如果开始时间为 11 00 结束时间为 22 00 则效果很好 但是 当我尝试比较开始时间 16 00 和结束时间 03
  • T-SQL:将新的 INSERT 标识返回给 C#

    我使用存储过程将值放入 SQL Server 该过程将向所添加的行添加一个 ID 我需要将此 ID 返回到我的代码中 目前我可以在 Visual Studio 的 OUTPUT 窗口中看到输出 id 但似乎无法在我的代码中捕获它 这是该过程