2015-06-19 52 views
1

我想向Infragistics網格中插入一行。它有2列,ID和名稱。兩者都有約束。但是,當我插入我只想使用名稱列作爲參數。但是當我同時使用時,插入工作。我有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> 

選擇存儲過程:

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是使用SqlDataSource13的DataSourceID定義的。它在上面。 –

回答

1

我發現了問題......它不是SqlDataSource的,但需要在查詢所有綁定字段的Infragistics控制。 因此,因爲我的Id字段已被綁定,所以我必須在插入命令中使用它作爲參數,即使我不需要它;這有點奇怪。 但是,對於其他人是問題...我通過在插入語句中添加ID參數並將默認值設置爲零來解決此問題。