我想从insert返回id。 我发现解决方案是使用select scope_identify。 但我想要我的代码示例。
sqlDatasource ds = new sqlDatasource();
ds.InsertCommand = "INSERT INTO Product (Name) VALUES (@Name)";
ds.InsertParameters.Add("@Name", txtName.text);
ds.Insert();
答案 0 :(得分:0)
INSERT
语句无法返回任何内容。您必须执行SELECT
才能获得范围标识。如果要在一个语句中执行所有操作,则无法使用SqlDataSource.Insert执行此操作。正如文档所述,它返回一个int
来计算受该语句影响的行。
相反,你可以这样做:
string query = "INSERT INTO Product (Name) VALUES (@Name);Select SCOPE_IDENTITY();;";
SqlCommand sqlCommand = new SqlCommand(query, connection);
connection.Open();
string NewID= sqlCommand.ExecuteScalar();
希望我帮忙!
答案 1 :(得分:0)
如果您正在使用oracle,RETURNING INTO可能正是您正在寻找的。它允许您将新ID保存在输出变量中。我只使用了ExecuteNonQuery()
,因此它可能不适用于Insert()
如果您正在使用sql developer,OUTPUT可能有帮助,尽管我自己还没有使用过它。
答案 2 :(得分:0)
在网上搜索3天后没有找到可接受的答案;这是有效的:
使用插入用户名并返回Id ...
的示例创建类似于此的存储过程:
create procedure Users_Insert
@UserName varchar(25)
,@UserId int = null output
as
insert into Users (UserName) values (@UserName)
select @UserId = scope_identity();
return @UserId;
现在在您的aspx页面中配置您的SqlDataSource:
<asp:SqlDataSource ID="dsUsers" runat="server"
ConnectionString="<%$ ConnectionStrings:dbConnection %>"
InsertCommand="Users_Insert" InsertCommandType="StoredProcedure" OnInserted="dsUsers_Inserted">
<InsertParameters>
<asp:ControlParameter ControlID="txtUserName" Name="UserName" Type="String" PropertyName="Text" />
<asp:Parameter Name="UserId" Type="Int32" Direction="ReturnValue" />
</InsertParameters>
</asp:SqlDataSource>
请注意,OnInserted事件已连线。
现在,在您的代码中,可能在Save按钮单击事件中,调用insert方法:
dsUsers.Insert();
最后,在我们之前连接的dsUsers_Inserted方法中,获取标识:
protected void dsUsers_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
int userId = Convert.ToInt32(e.Command.Parameters["@UserId"].Value);
}
希望这对至少一个人有帮助。
快乐的编码!
答案 3 :(得分:0)
很难找到确切的答案,在这里:SQLDataSourceIdentity Post
在此处推荐用户:Retrieving the Just-Inserted ID of an IDENTITY Column Using a SqlDataSource Control
第1步-添加输出参数
<asp:Parameter Direction="Output" Name="NewID" Type="Int32" />
步骤2-在SqlDataSource InsertCommand中的插入命令之后添加其他语句
SELECT @NewID=Scope_Identity()
第3步-检索SqlDataSource_Inserted事件处理程序中的插入值
e.command.Parameters("@NewID").value.tostring