1

我想做这样的事情:

Dim pId As TdParameter = New TdParameter With {.ParameterName = "p_id", .SourceColumn = "id", .TdType = TdType.Integer, .Direction = ParameterDirection.Output}

然后像这样:

cmd.Parameters.Add(pId);

cmd.CommandText = "insert into employee (id, name, age) values (?, 'bob', 34)"

cmd.ExecuteNonQuery();

然后pId.Value返回新记录的 Id 列(这是一个标识列)的值。如果我能做到这一点,那就太好了。

4

2 回答 2

1

INSERT 语句的执行永远不会返回结果集。最多您可能会收到返回给客户端的活动计数。要获取标识列的值,需要在 INSERT 完成后使用 SELECT 语句。

于 2012-07-14T16:59:25.370 回答
0

假设一张桌子:

  • ID 整数(默认生成的标识列无循环)
  • 名称 varchar(20)
  • 电子邮件 varhcar(50)

而不是使用.ExecuteNonQuery()您的插入语句,.ExecuteReader()而是使用。它实际上会返回刚刚插入的记录,并带有 Identity 列的值!

Using cmd As TdCommand = MyConnection.CreateCommand
    cmd.GeneratedDataBehavior = GeneratedDataBehavior.IdentityColumn
    cmd.CommandText = "insert into mydb.employee (name, email) values ('bob', 'bob@snob.com')"
    Using reader As TdDataReader = cmd.ExecuteReader
        While reader.Read
            Id = reader.GetInt64(reader.GetOrdinal("Id"))
            iRowsInserted += 1
        End While
    End Using
End Using
于 2015-10-20T11:16:04.480 回答