如何使用TableAdapter插入命令检索SQL身份?

时间:2019-02-11 21:50:31

标签: vb.net

VS 2017 VB.NET 4.6.1

我已经使用标准向导和存储过程来创建数据源以获取数据。我已经编辑了数据源,并使用存储过程添加了一个插入命令来执行插入操作。我想将存储过程生成的Scope_Identity返回给我的VB应用程序。

我已经使用Parameters Collection Editor和存储过程添加了一个额外的out输出变量,但是我没有任何运气。我不想编写整个tableadapter的代码,因为我有71个参数,我也不喜欢将它们全部打出来。

也许这不是可行的,但问问也无妨。如果有人有任何信息或见识,我将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:1)

好的,我已经开始工作了。

  1. 向我的插入存储过程添加一个新参数:@job_order as int OUTPUT
  2. 在存储过程中,在插入语句之后:SET @job_order = SCOPE_IDENTITY
  3. 在vb.net项目中,编辑数据集,查看TableAdapter的属性,并确保将GenerateDBDirectMethods设置为True
  4. 也可以在TableAdapter属性中单击InsertCommand上的下拉菜单,然后选择“新建”。
  5. 将CommandType更改为StoredProcedure
  6. 单击CommandText的下拉列表,然后选择您的存储过程
  7. 在VS 2017中,存在一个问题,即不会从存储过程中填充“参数”列表。要解决此问题,请添加dbo。在“命令文本”字段中的过程名称之前。例如将apAddJob更改为dbo.apAddJob。更改完成后,参数列表应会填充。
  8. 打开InsertCommand的Parameters集合(现在应该具有值),并验证您在第一步中添加的新参数不仅显示在列表中,而且具有InputOutput的方向。
  9. 在relevent表单的代码页中,使自己成为模块级变量(在顶部,而不是在任何方法内部),如下所示:将m_NewJobOrder As Integer变暗
  10. 使用表适配器的“插入”命令执行插入,如下所示将新的模块级别变量添加到末尾:     Me.ApGetSingleJobTableAdapter.Insert(txtbox1.text,txtbox2.text,(所有其他值),m_NewJobOrder)
  11. 标识值现在应在插入后存储在m_NewJobOrder中。通常,我用它来用新创建的记录重新填充数据集。

答案 1 :(得分:0)

通过将“额外输出变量”设置为Scope_Identity(),您应该能够返回Scope_Identity()

示例:

SET @ID = SCOPE_IDENTITY()

这是另一个堆栈溢出讨论中显示的示例:

    CREATE PROCEDURE AddCategory
  -- Add the parameters for the stored procedure here
  @Category NVARCHAR(15),
  @CategoryID INT OUTPUT
AS
BEGIN
  SET NOCOUNT ON;

  -- Insert statements for procedure here
  INSERT INTO Categories (CategoryName) VALUES (@Category)
  SET @CategoryID = SCOPE_IDENTITY()
END

Fetch Scope_Identity

答案 2 :(得分:0)

在插入查询的末尾添加一行,然后添加 UpdateRange

,然后将执行模式更改为标量,而不是NonQuery。

这是一个非常好的教程:

Microsoft Docs Tutorial