一尘不染

使用C#从SQL Server插入命令返回值

c#

我在Visual Studio中使用C#,将一行插入到这样的表中:

INSERT INTO foo (column_name)
VALUES ('bar')

我想做这样的事情,但是我不知道正确的语法:

INSERT INTO foo (column_name)
VALUES ('bar')
RETURNING foo_id

这将从foo_id新插入的行返回该列。

此外,即使我找到了正确的语法,我仍然遇到另一个问题:我拥有SqlDataReaderSqlDataAdapter可以支配。据我所知,前一个用于读取数据,第二个用于处理数据。当插入带有return语句的行时,我同时在操作和读取数据,所以我不确定该使用什么。也许我应该使用完全不同的东西?


阅读 300

收藏
2020-05-19

共1个答案

一尘不染

SCOPE_IDENTITY返回插入到同一作用域的标识列中的最后一个标识值。范围是一个模块:存储过程,触发器,函数或批处理。因此,如果两个语句位于相同的存储过程,函数或批处理中,则它们属于同一范围。

您可以使用SqlCommand.ExecuteScalar执行插入命令并在一个查询中检索新ID。

using (var con = new SqlConnection(ConnectionString)) {
    int newID;
    var cmd = "INSERT INTO foo (column_name)VALUES (@Value);SELECT CAST(scope_identity() AS int)";
    using (var insertCommand = new SqlCommand(cmd, con)) {
        insertCommand.Parameters.AddWithValue("@Value", "bar");
        con.Open();
        newID = (int)insertCommand.ExecuteScalar();
    }
}
2020-05-19