SWL错误函数指定了太多参数

时间:2011-05-04 21:37:42

标签: asp.net sql-server-2008

我正在使用 ASP.NET 3.5 SQL Server 2008

我有SQLDataSource& Gridview。我正在尝试使用 SQL 中的存储过程同时更新2个表。 SQLDatasource正在传递7个参数。 存储过程需要的5个参数,返回值& StudentID。

不确定错误是否在我的SQLDatasorce存储过程中。

这是我的 ASPX 代码:

 <asp:SqlDataSource ID="sqldsUserLoginNLevels" runat="server" 
     ConnectionString="<%$ ConnectionStrings:QuizStarConnectionString %>"

 SelectCommand="SELECT UserLogins.StudentID, UserLogins.StudentName, UserLogins.UserID,
      UserLogins.Password, UserLevels.GrammarStart, UserLevels.GrammarCurrent,
      UserLevels.MathStart, UserLevels.MathCurrent 
      FROM UserLogins 
      INNER JOIN UserLevels ON UserLogins.StudentID = UserLevels.StudentID" 

  DeleteCommand="DELETE FROM [UserLogins] WHERE [StudentID] = @original_StudentID"

  InsertCommand="INSERT INTO [UserLogins] ([StudentName], [UserID], [Password]) 
     VALUES (@StudentName, @UserID, @Password)" 

  UpdateCommand="UpdateUserLoginsAndUserLevels" 

UpdateCommandType="StoredProcedure" >

    <DeleteParameters>
        <asp:Parameter Name="original_StudentID" />
    </DeleteParameters>

    <UpdateParameters>
        <asp:Parameter Name="StudentName" Type="String" />
        <asp:Parameter Name="UserID" Type="String" />
        <asp:Parameter Name="Password" Type="String" />
        <asp:Parameter Name="GrammarStart" Type="String" />
        <asp:Parameter Name="MathStart" Type="String" />
        <asp:Parameter Direction="ReturnValue" Name="RETURN_VALUE" Type="Int32" />
    </UpdateParameters>

    <InsertParameters>
        <asp:Parameter Name="StudentName" Type="String" />
        <asp:Parameter Name="UserID" Type="String" />
        <asp:Parameter Name="Password" Type="String" />
    </InsertParameters>

</asp:SqlDataSource>

我的存储过程是:

ALTER PROCEDURE [dbo].[UpdateUserLoginsAndUserLevels] (  
@StudentName    VARCHAR(50), 
@UserID     NCHAR(10), 
@Password   NCHAR(10), 
@GrammarStart   NCHAR(10), 
@MathStart  NCHAR(10))

AS 
DECLARE @StudentID INT; 


BEGIN Transaction 
    BEGIN TRY         

        SELECT * From UserLogins                   
            Where StudentID = @StudentID 

        UPDATE UserLogins                  
            SET 
                StudentName= @StudentName,
                UserID = @UserID,
                Password = @Password
            Where StudentID = @StudentID  

        UPDATE UserLevels                  
            SET 
                GrammarStart= @GrammarStart,
                MathStart = @MathStart
                FROM UserLevels
                INNER JOIN UserLogins ON UserLogins.StudentID = UserLevels.StudentID 
            WHERE (UserLevels.StudentID =  @StudentID)
    END TRY 

    BEGIN CATCH         
        DECLARE @ErrorMessage NVARCHAR(4000), @ErrorSeverity INT         
        -- Assign variables to error-handling functions that          
        -- capture information for RAISERROR.         
        SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY()         
        -- Rollback the failed transaction         
        ROLLBACK;         
        -- Raise an error: with the original error information.         
        RAISERROR(@ErrorMessage, @ErrorSeverity, 1); 
    END CATCH 
COMMIT Transaction; 

尚未想出如何发布代码。遗憾。

1 个答案:

答案 0 :(得分:0)

确保您不是双重添加参数。由于您要在aspx页面中添加它们,因此无需在后面的代码中添加它们。

例如,如果你的代码背后有这个:

sqldsUserLoginNLevelsUserID.UpdateParameters.Add(new Parameter("UserID ", TypeCode.Int32)); 

它可以解释你的错误。

如果你需要从后面的代码设置值,请执行以下操作:

sqldsUserLoginNLevelsUserID.UpdateParameters["UserID "].DefaultValue = "1";