C# 如何知道新记录的id号

C# 如何知道新记录的id号,c#,asp.net,sql-server,C#,Asp.net,Sql Server,表a: 在visualstudioc中 id(auto numbering) | value --------------------+---------- 1 | 100 2 | 200 3 | 100 4 | 500 如何知道C中新记录的id号自动编号?选项: 您也可以在查询中执行此操作: insert into ta

表a:

在visualstudioc中

id(auto numbering)  |   value
--------------------+----------
1                   |    100
2                   |    200
3                   |    100
4                   |    500
如何知道C中新记录的id号自动编号?

选项: 您也可以在查询中执行此操作:

insert into tableA (name) values (300)
但如果您在代码隐藏中需要此功能:

将该查询复制到项目代码中

select top 1 id from yourtable order by id desc
使用:

public static int ExecuteQuery()
        {
            using (SqlConnection con = new SqlConnection("Your connection String here"))
            {
                con.Open();
                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText = "select top 1 id from yourtable order by id desc";
                    cmd.CommandType = CommandType.Text;
                    int result = cmd.ExecuteNonQuery();
                    return result;
                }
            }
        }

我建议您创建一个存储过程,如:

SQL

C

一种方法是使用@@Identity属性

@@identity提供当前会话和表中最后插入的行id

有关更多信息,请查看检索上次插入id的各种方法。请尝试以下方法:

using (SqlConnection con = new SqlConnection("Your connection String here"))
{
        con.Open();
        string sql = "INSERT INTO Table(col1,col2,col3) VALUES(@eimg, @etype, @flag) SELECT @@IDENTITY";
        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.Parameters.AddWithValue("@eimg", imgByte);
        cmd.Parameters.AddWithValue("@etype", 4);
        cmd.Parameters.AddWithValue("@flag", false);
        int id = Convert.ToInt32(cmd.ExecuteScalar());
}

在表中插入名称值300;选择范围和标识;我把这句话放在哪里?一点也不正确,因为它不能满足并发性。每次创建存储过程都是不切实际的,你不需要这个过程。无论如何,使用输出应该可以正常工作。如果表上有一个触发器,而该触发器又插入到另一个具有标识列的表中@@identity的值来自触发器中的insert,而不是insert to表。最好改用scope_identity,但问题中没有提到任何触发器。另外,我在答案中提供了一个链接,供提问者选择他自己想要使用的东西。你怎么知道将来不会有?然后他可以使用该链接并自行决定。该链接中对范围标识的描述是错误的。这是错误的,但如果触发器或用户定义函数在生成值的同一个表上受到影响,则返回标识记录,然后SCOPE_identity返回由触发器或用户定义函数创建的标识记录。
CREATE PROCEDURE NameOfProcedure
(
    @value INT = NULL,
)
AS
BEGIN
    INSERT INTO tableA
    (
        name
    )
    OUTPUT INSERTED.IDCol
    VALUES
    (
        @value
    )
END
GO
var cmd = new SqlCommand("NameOfProcedure", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@value", whateverValue);

var result = (int)cmd.ExecuteScalar();
using (SqlConnection con = new SqlConnection("Your connection String here"))
{
        con.Open();
        string sql = "INSERT INTO Table(col1,col2,col3) VALUES(@eimg, @etype, @flag) SELECT @@IDENTITY";
        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.Parameters.AddWithValue("@eimg", imgByte);
        cmd.Parameters.AddWithValue("@etype", 4);
        cmd.Parameters.AddWithValue("@flag", false);
        int id = Convert.ToInt32(cmd.ExecuteScalar());
}
    con.Open();
    string sql = "INSERT INTO Table(col2) output INSERTED.id VALUES(@value)";
    SqlCommand cmd = new SqlCommand(sql, con);
    cmd.Parameters.AddWithValue("@value", "300");

    int new_id = (int)cmd.ExecuteScalar(); // here is the new id