如何从代码中的sqldatasource.insert()返回标识值?

时间:2014-01-20 07:49:29

标签: c# asp.net sqldatasource

我想从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();

4 个答案:

答案 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