2015-06-19 4 views
1

Я хочу вставить строку в сетку Infragistics. Он имеет 2 столбца, идентификатор и имя. Оба связаны. Но когда я вставляю, я хочу использовать столбец Name в качестве параметра. Но когда я использую оба варианта, вставка работает. У меня есть ID как параметр, но я не использую его, потому что это столбец идентификатора. Когда я использую только «Имя», я получаю ошибку, слишком много аргументов для хранимой процедуры.Ошибка вставки SqlDataSource - слишком много аргументов

Это разметка:

<ig:WebHierarchicalDataGrid runat="server" height="600px" width="875px" 
    ClientIDMode="Static" AutoGenerateBands="False" 
    AutoGenerateColumns="False" DataKeyFields="ID"   
    DataMember="SqlDataSource9_DefaultView" StyleSetName="Windows7" 
    ID="wdgPrivileges" 
    DataSourceID="WebHierarchicalDataSource7" Key="SqlDataSource9_DefaultView"> 
    <Columns> 
    <ig:BoundDataField DataFieldName="ID" Key="ID" Hidden="true"> 
     <Header Text="ID" /> 
     <header text="ID" /> 
    </ig:BoundDataField> 
    <ig:BoundDataField DataFieldName="Name" Key="Name" Width="95%"> 
     <Header Text="Name" /> 
     <header text="Name" /> 
    </ig:BoundDataField>     
    </Columns> 
</ig:WebHierarchicalDataGrid> 

<asp:SqlDataSource ID="SqlDataSource13" runat="server" 
    ConnectionString="<%$ ConnectionStrings %>" 
    SelectCommand="GetPrivilege" SelectCommandType="StoredProcedure" 
    UpdateCommand="SetPrivilege" UpdateCommandType="StoredProcedure" 
    InsertCommand="InsPrivilege" InsertCommandType="StoredProcedure">  
    <UpdateParameters> 
     <asp:Parameter Name="ID" Type="Int32" />   
     <asp:Parameter Name="Name" Type="String" />    
    </UpdateParameters> 
    <InsertParameters> 
     <asp:Parameter Name="Name" Type="String" />      
    </InsertParameters> 
</asp:SqlDataSource> 

Моя хранимая процедура:

PROCEDURE [dbo].[InsPrivilege] 
    @Name varchar(50) 
AS 
Begin 
    INSERT INTO Privilege ([Name], LastUpdate) 
    VALUES (@Name, GetDate()) 
end 

мне нужна ID быть связанным для команды обновления SQL.

Должен ли я использовать его в качестве параметра во вставке и просто не использовать его?

UPDATE

<ig:WebHierarchicalDataSource ID="WebHierarchicalDataSource7" runat="server"> 
    <DataViews> 
    <ig:DataView ID="SqlDataSource9_DefaultView" DataMember="DefaultView" 
        DataSourceID="SqlDataSource13" />   
    </DataViews>  
</ig:WebHierarchicalDataSource> 

UPDATE Это обновление и выберите сохраненную информацию процедуры ...

<asp:SqlDataSource ID="SqlDataSource13" runat="server" 
     ConnectionString="<%$ ConnectionStrings %>" 
     SelectCommand="GetPrivilege" SelectCommandType="StoredProcedure" 
     UpdateCommand="SetPrivilege" UpdateCommandType="StoredProcedure" 
     InsertCommand="dmInsPrivilege" InsertCommandType="StoredProcedure">  
     <UpdateParameters> 
      <asp:Parameter Name="ID" Type="Int32" />   
      <asp:Parameter Name="Name" Type="String" />    
     </UpdateParameters> 
     <InsertParameters> 
      <asp:Parameter Name="ID" Type="Int32" DefaultValue="0" /> 
      <asp:Parameter Name="Name" Type="String" />      
     </InsertParameters>  
</asp:SqlDataSource> 

Выберите Stored Procedure:

PROCEDURE [dbo].[GetPrivilege] 
AS 
Begin 
    SELECT ID, [Name] 
    FROM Privilege with (nolock)  
end 

Обновление хранимой процедуры:

PROCEDURE [dbo].[SetPrivilege] 
    @ID int, 
    @Name varchar(50) 
AS 
Begin 
    UPDATE Privilege 
    SET [Name] = @Name, LastUpdate = GetDate() 
    WHERE ID = @ID 
end 

Сообщение об ошибке: [SqlException]: Процедура или функция InsPrivilege имеет слишком много аргументов, указанных.

+0

Покажите нам полное сообщение об исключении и покажите нам хранимую процедуру «UpdPrivileges». –

+0

Я думаю, вы даете нам код 'SqlDataSource13', но ваша сетка использует' WebHierarchicalDataSource7';). –

+0

WebHierarchicalDataSource7 определяется с помощью DataSourceID SqlDataSource13. Это выше. –

ответ

1

Я выяснил, проблема ... это не SqlDataSource, а Infragistics Control, который требует всех связанных полей в запросах. Итак, поскольку мое поле Id привязано, я должен использовать его как параметр в моей команде вставки, хотя мне это не нужно; что странно. Но для кого-то еще с проблемой ... Я решил это, добавив параметр ID в оператор insert и установив значение по умолчанию на ноль.

Смежные вопросы