C# 如何知道新记录的id号
表a: 在visualstudioc中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
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