首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlDataSource插入错误-太多参数

SqlDataSource插入错误-太多参数
EN

Stack Overflow用户
提问于 2015-06-19 20:25:54
回答 1查看 409关注 0票数 1

我想将一行插入到一个完整的网格中。它有两个列,ID和名称。两人都被绑住了。但是,当我插入时,我只想使用Name列作为参数。但是当我同时使用时,插入就能工作了。我将ID作为参数,但我不使用它,因为它是一个标识列。当我只使用'Name‘时,我会得到错误,存储过程的参数太多。

这是标记:

代码语言:javascript
复制
<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>

我的存储过程:

代码语言:javascript
复制
PROCEDURE [dbo].[InsPrivilege]
    @Name varchar(50)
AS
Begin
    INSERT INTO Privilege ([Name], LastUpdate)
    VALUES (@Name, GetDate())
end

我需要将ID绑定到update SQL命令。

我是否也必须使用它作为插入中的参数,而不使用它呢?

更新

代码语言:javascript
复制
<ig:WebHierarchicalDataSource ID="WebHierarchicalDataSource7" runat="server">
   <DataViews>
   <ig:DataView ID="SqlDataSource9_DefaultView" DataMember="DefaultView" 
                    DataSourceID="SqlDataSource13" />           
   </DataViews>       
</ig:WebHierarchicalDataSource>

更新这是更新和选择存储过程信息.

代码语言:javascript
复制
<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>

选择存储过程:

代码语言:javascript
复制
PROCEDURE [dbo].[GetPrivilege]
AS
Begin   
    SELECT ID, [Name]
    FROM Privilege with (nolock)    
end

更新存储过程:

代码语言:javascript
复制
PROCEDURE [dbo].[SetPrivilege]
    @ID int,
    @Name varchar(50)
AS
Begin
    UPDATE Privilege 
    SET [Name] = @Name, LastUpdate = GetDate()
    WHERE ID = @ID  
end

错误消息: SqlException:过程或函数InsPrivilege指定的参数太多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-22 15:15:52

我发现problem...it不是SqlDataSource,而是要求查询中所有绑定字段的不碎片控制。因此,因为我的Id字段是绑定的,所以我必须在insert命令中使用它作为参数,即使我不需要它;这有点奇怪。但是对于其他有is问题的人,我通过在insert语句中添加ID参数并将默认值设置为零来解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30946714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档