C# 执行insert语句并将id放入局部变量?
是否有方法返回自动生成的新行ID并将其放入局部变量中 提前多谢了, 阿德里安使用C# 执行insert语句并将id放入局部变量?,c#,sql-server,C#,Sql Server,是否有方法返回自动生成的新行ID并将其放入局部变量中 提前多谢了, 阿德里安使用 SqlDataSource myQuiz = new SqlDataSource(); myQuiz.ConnectionString = ConfigurationManager.ConnectionStrings["yafnet"].ToString(); myQuiz.InsertCommand = "INSERT INTO [QuizTable]([Quiz_Title],[Quiz_Descriptio
SqlDataSource myQuiz = new SqlDataSource();
myQuiz.ConnectionString = ConfigurationManager.ConnectionStrings["yafnet"].ToString();
myQuiz.InsertCommand = "INSERT INTO [QuizTable]([Quiz_Title],[Quiz_Description]) VALUES (@Quiz_Title,@Quiz_Description)";
myQuiz.InsertParameters.Add("Quiz_Title",Quiz_Title.Text);
myQuiz.InsertParameters.Add("Quiz_Description",Quiz_Description.Text);
myQuiz.Insert();
Response.Redirect("QuizQuests.aspx");
它返回表中生成的最后一个标识值,而不管创建该值的连接如何,也不管生成该值的语句的范围如何。
当前标识不受范围和会话的限制;它仅限于指定的表。IDENT_CURRENT返回在任何会话和任何作用域中为特定表生成的标识值。使用
SqlDataSource myQuiz = new SqlDataSource();
myQuiz.ConnectionString = ConfigurationManager.ConnectionStrings["yafnet"].ToString();
myQuiz.InsertCommand = "INSERT INTO [QuizTable]([Quiz_Title],[Quiz_Description]) VALUES (@Quiz_Title,@Quiz_Description)";
myQuiz.InsertParameters.Add("Quiz_Title",Quiz_Title.Text);
myQuiz.InsertParameters.Add("Quiz_Description",Quiz_Description.Text);
myQuiz.Insert();
Response.Redirect("QuizQuests.aspx");
它返回表中生成的最后一个标识值,而不管创建该值的连接如何,也不管生成该值的语句的范围如何。
当前标识不受范围和会话的限制;它仅限于指定的表。IDENT_CURRENT返回在任何会话和任何作用域中为特定表生成的标识值。@Adrian De Barro:hi您可以使用以下代码获取插入的记录id并保存在变量中 在sqlquery中添加以下语句:
SELECT IDENT_CURRENT(‘QuizTable’)
您的C#代码如下:
return @@IDENTITY
@阿德里安·德巴罗:您好,您可以使用以下代码来获取插入的记录id并保存在变量中 在sqlquery中添加以下语句:
SELECT IDENT_CURRENT(‘QuizTable’)
您的C#代码如下:
return @@IDENTITY
如果您想100%确定您在实际的
QuizTable
中插入的内容确实得到了标识,您应该使用SCOPE\u identity()
(正如Luiggi Mendoza在其评论中提到的那样),而不是@@identity
或IDENT\u CURRENT
@@IDENTITY
可能不起作用,因为。因此,如果在QuizTable
上有一个触发器,它在另一个表中插入了一行,该表也有一个标识列,@@identity
将返回第二次插入的值,而不是原始插入到QuizTable
中的值
IDENT_CURRENT
将返回表的最后一个标识值(并且只返回表的标识值,因此是否存在上一示例中的触发器无关紧要)。但它返回任何会话的最后一个标识值。因此,如果在您的
INSERT
和您的IDENT_CURRENT
之间的另一个会话中插入了另一行,如果您想100%确保在实际的QuizTable
中插入的内容确实获得了身份,您应该使用SCOPE_identity(),而不是@@IDENTITY
或IDENT\u CURRENT
@@IDENTITY
可能不起作用,因为。因此,如果在QuizTable
上有一个触发器,它在另一个表中插入了一行,该表也有一个标识列,@@identity
将返回第二次插入的值,而不是原始插入到QuizTable
中的值
IDENT_CURRENT
将返回表的最后一个标识值(并且只返回表的标识值,因此是否存在上一示例中的触发器无关紧要)。
但它返回任何会话的最后一个标识值。因此,如果在您的INSERT
和您的IDENT_CURRENT
之间的另一个会话中插入另一行,在您的C#code中执行:在您的C#code中执行:但是如果另一个会话在插入之后,但在您的IDENT#u CURRENT
调用之前,在中插入QuizTable
,您将获得另一个insert的标识值,而不是您的(有关详细信息,请参阅),但是如果另一个会话在您的insert之后,但在您的IDENT_CURRENT
调用之前,插入到QuizTable
中,您将获得另一个insert的标识值,而不是您的(有关详细信息,请参阅)