插入后访问行PK(SqlDataSource)

时间:2010-10-07 10:14:05

标签: c# sqldatasource

我需要能够在C#中获取插入行的主键,到目前为止,我不确定如何。我已将SELECT SCOPE_IDENTITY()放入我的SQL查询中,但如何从SqlDataSource_Inserting方法访问它,以便将其存储在审计表中?在我的方法中,我现在只知道如何访问参数(e.Command.Parameters)

编辑:

我的参数存储在我的ASP.NET文件中(如某些提取):

InsertCommand="INSERT INTO [NominalCode] ([VAXCode], [Reference], [CostCentre], [Department], [ReportingCategory]) VALUES (@VAXCode, @Reference, @CostCentre, @Department, @ReportingCategory)"

        <InsertParameters>
            <asp:ControlParameter ControlID="DetailsView1" Name="VAXCode" 
                PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="DetailsView1" Name="Reference" 
                PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="DetailsView1" Name="CostCentre" 
                PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="DetailsView1" Name="Department" 
                PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="DetailsView1" Name="ReportingCategory" 
                PropertyName="SelectedValue" />
        </InsertParameters>

我在C#codebehind

中填写参数
                command.Parameters.AddWithValue("@source", "Nominal");
            command.Parameters.AddWithValue("@action", "Insert");
            command.Parameters.AddWithValue("@item", fields);
            command.Parameters.AddWithValue("@userid", name);
            command.Parameters.AddWithValue("@timestamp", DateTime.Now);

由于

1 个答案:

答案 0 :(得分:2)

您可以通过命令参数访问它,方法是添加一个带有Direction输出的新参数,(如果您没有返回其他结果,则可以使用ReturnValue,例如受影响的行)。

即。将这三行添加到参数列表的末尾

SqlParameters pKey = new SqlParameters("@pKey", System.Data.SqlDbType.Int);
pKey.Direction = Output;
command.Parameters.Add(pKey);

然后在sql的末尾,将该参数设置为Primary Key值,如下所示:

set @pKey = scope_identity();

即。

 InsertCommand="INSERT INTO [NominalCode] ([VAXCode], [Reference], [CostCentre], [Department], [ReportingCategory]) VALUES (@VAXCode, @Reference, @CostCentre, @Department, @ReportingCategory); set @pKey = scope_identity()"

然后在执行命令后再读回来:

int primaryKey = (int)pKey.Value;

Simples!

执行审计的另一种方法是让存储过程直接执行审计捕获,以确保一致性并在所有应用程序中保存,但这完全取决于首选项和系统设计。