SqlDataSource 插入错误 - 参数太多
SqlDataSource insert error - too many arguments
我想在 Infragistics 网格中插入一行。它有 2 列,ID 和 Name。两者都是绑定的。但是当我插入时,我只想使用 Name 列作为参数。但是当我同时使用两者时,插入有效。我将 ID 作为参数,但我没有使用它,因为它是一个标识列。当我只使用 'Name' 时,出现错误,存储过程的参数太多。
这是标记:
<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
更新SQL命令需要绑定ID
我是否也必须将它用作插入中的参数而不使用它?
更新
<ig:WebHierarchicalDataSource ID="WebHierarchicalDataSource7" runat="server">
<DataViews>
<ig:DataView ID="SqlDataSource9_DefaultView" DataMember="DefaultView"
DataSourceID="SqlDataSource13" />
</DataViews>
</ig:WebHierarchicalDataSource>
更新
这是更新和 Select 存储过程信息...
<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>
Select 存储过程:
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 指定的参数太多。
我发现了问题...不是 SqlDataSource 而是 Infragistics Control 需要查询中的所有绑定字段。
因此,因为我的 Id 字段是绑定的,所以即使我不需要它,我也必须将它用作我的插入命令中的参数;这有点奇怪。
但是对于其他有问题的人...我通过在插入语句中添加 ID 参数并将默认值设置为零来解决它。
我想在 Infragistics 网格中插入一行。它有 2 列,ID 和 Name。两者都是绑定的。但是当我插入时,我只想使用 Name 列作为参数。但是当我同时使用两者时,插入有效。我将 ID 作为参数,但我没有使用它,因为它是一个标识列。当我只使用 'Name' 时,出现错误,存储过程的参数太多。
这是标记:
<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
更新SQL命令需要绑定ID
我是否也必须将它用作插入中的参数而不使用它?
更新
<ig:WebHierarchicalDataSource ID="WebHierarchicalDataSource7" runat="server">
<DataViews>
<ig:DataView ID="SqlDataSource9_DefaultView" DataMember="DefaultView"
DataSourceID="SqlDataSource13" />
</DataViews>
</ig:WebHierarchicalDataSource>
更新 这是更新和 Select 存储过程信息...
<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>
Select 存储过程:
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 指定的参数太多。
我发现了问题...不是 SqlDataSource 而是 Infragistics Control 需要查询中的所有绑定字段。 因此,因为我的 Id 字段是绑定的,所以即使我不需要它,我也必须将它用作我的插入命令中的参数;这有点奇怪。 但是对于其他有问题的人...我通过在插入语句中添加 ID 参数并将默认值设置为零来解决它。