我需要能够在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);
由于
答案 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!
执行审计的另一种方法是让存储过程直接执行审计捕获,以确保一致性并在所有应用程序中保存,但这完全取决于首选项和系统设计。