Доступ к строкам PK после вставки (SqlDataSource) - PullRequest
0 голосов
/ 07 октября 2010

Мне нужно иметь возможность получить первичный ключ вложенной строки в 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 #

                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 Ответ

2 голосов
/ 07 октября 2010

Вы можете получить к нему доступ через параметры команды, добавив новый с выходным значением (или вы можете использовать ReturnValue, если вы не возвращаете другой результат, например на затронутые строки).

т.е.Добавьте эти три строки в конец списка параметров

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

Затем в конце вашего sql установите для этого параметра значение первичного ключа следующим образом:

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!

Еще один способ аудита - сохранить сохраненный процессвыполнять аудит непосредственно, чтобы обеспечить согласованность и сохранить выполнение во всех приложениях, но все это зависит от предпочтений и дизайна системы.

...