ASP.NET: вставка SqlDataSource - параметр идентификации - PullRequest
1 голос
/ 31 января 2012

У меня есть приложение asp.net, в которое я вставляю таблицу SQL, используя GridView, связанный с SqlDataSource. Проблема в том, что я не знаю параметр «Идентичность» для использования при вставке. Столбец «Идентичность» должен автоматически увеличиваться, однако после вставки я получаю исключение, что параметр Идентичность не должен быть нулевым. Как мне создать оператор вставки, чтобы это работало, или как мне указать следующий правильный идентификатор # для указания? Спасибо.

Вот мой код SqlDataSource:

 <asp:SqlDataSource ID="VehiclesSqlDS" runat="server" 
        ConnectionString="<%$ ConnectionStrings:RamRideOpsConnectionString %>" 
        SelectCommand="SELECT * FROM [Vehicles]" 
        ConflictDetection="CompareAllValues" 
        InsertCommand="INSERT INTO [Vehicles] ([Identity], [CarNum], [MaxPassengers], [Status], [CurrPassengers], [StartAdd], [EndAdd], [AvgRideTime], [numRides]) VALUES (@Identity, @CarNum, @MaxPassengers, @Status, @CurrPassengers, @StartAdd, @EndAdd, @AvgRideTime, @numRides)" 
        OnInserting="VehiclesSqlDS_Insert"
        OldValuesParameterFormatString="original_{0}">         
        <InsertParameters>
            <asp:Parameter Name="Identity" Type="Int32 "/>
            <asp:Parameter Name="CarNum" Type="Int32" DefaultValue="-1"/>
            <asp:Parameter Name="MaxPassengers" Type="Int32" DefaultValue="3" />
            <asp:Parameter Name="Status" Type="String" DefaultValue="Ready" />
            <asp:Parameter Name="CurrPassengers" Type="Int32" DefaultValue="0" />
            <asp:Parameter Name="StartAdd" Type="String" />
            <asp:Parameter Name="EndAdd" Type="String" />
            <asp:Parameter DbType="Time" Name="AvgRideTime" />
            <asp:Parameter Name="numRides" Type="Int32" DefaultValue="0" />
        </InsertParameters>        
    </asp:SqlDataSource>

Ответы [ 4 ]

3 голосов
/ 31 января 2012

вам нужно установить направление параметра на OUTPut, чтобы получить значение идентификатора. от MSDN

и обработать событие onInserted для получения значения идентификатора

protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)
    {
        string sID = e.Command.Parameters["@Identity"].Value.ToString();
       //Display new ID

    }

ты можешь попробовать вот так.

<asp:sqlDataSource ID="Datasource" 
  SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"

  InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName); 
                 SELECT @EmpID = SCOPE_IDENTITY()"
  UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName 
                   WHERE EmployeeID=@EmployeeID"
  DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"

  ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
  OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
  RunAt="server">

  <SelectParameters>
    <asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
  </SelectParameters>

  <InsertParameters>
    <asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
  </InsertParameters>

</asp:sqlDataSource>
1 голос
/ 31 января 2012

Эти фрагменты могут помочь:

<InsertParameters>
   <asp:Parameter Name="SalesRepID" Type="Int32" />
   ...more params

    <asp:Parameter Name="QuoteID" Type="Int32" Direction="Output" />            
</InsertParameters>

Обратите внимание, что добавлена ​​вторая команда

InsertCommand="INSERT INTO [MyTable] (fields); SET @QuoteID = Scope_Identity();"
1 голос
/ 31 января 2012

Ever Present, то есть если предположить, что Identity является автоинкрементным столбцом.Это может быть просто обычный столбец.

Прежде чем пытаться вставить, вам нужно каким-то образом получить последнюю идентификационную информацию.

В качестве альтернативы вы можете написать триггер в базе данных, который автоматически обновляет столбец Identity при добавлении нового элемента.

1 голос
/ 31 января 2012

Вы должны опустить столбец Identity в операторе вставки.Включайте только столбцы данных.Сервер Sql создаст автоинкремент.

INSERT INTO [Vehicles] ([CarNum], [MaxPassengers], [Status], [CurrPassengers], [StartAdd], [EndAdd], [AvgRideTime], [numRides]) VALUES (@CarNum, @MaxPassengers, @Status, @CurrPassengers, @StartAdd, @EndAdd, @AvgRideTime, @numRides)
...