如何知道新记录的ID号

时间:2017-04-20 23:24:57

标签: c# asp.net sql-server

表A:

id(auto numbering)  |   value
--------------------+----------
1                   |    100
2                   |    200
3                   |    100
4                   |    500

在Visual Studio C#

insert into tableA (name) values (300)

如何知道C#中新记录的id号码(自动编号)?

4 个答案:

答案 0 :(得分:0)

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

<强> SQL

CREATE PROCEDURE NameOfProcedure
(
    @value INT = NULL,
)
AS
BEGIN
    INSERT INTO tableA
    (
        name
    )
    OUTPUT INSERTED.IDCol
    VALUES
    (
        @value
    )
END
GO

<强> C#

var cmd = new SqlCommand("NameOfProcedure", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@value", whateverValue);

var result = (int)cmd.ExecuteScalar();

答案 1 :(得分:0)

尝试这个:

    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

答案 2 :(得分:-2)

选项: 您也可以在Query:

中执行此操作
select top 1 id from yourtable order by id desc

但是如果你在Code Behind中需要这个:

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

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;
                }
            }
        }

使用:

Int id = ExecuteQuery();

答案 3 :(得分:-2)

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

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());
}

@@identity给出当前会话和表中最后插入的行ID。

有关详细信息,请检查此link有关检索上次插入ID的各种方法。