我正在使用 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;
尚未想出如何发布代码。遗憾。
答案 0 :(得分:0)
确保您不是双重添加参数。由于您要在aspx页面中添加它们,因此无需在后面的代码中添加它们。
例如,如果你的代码背后有这个:
sqldsUserLoginNLevelsUserID.UpdateParameters.Add(new Parameter("UserID ", TypeCode.Int32));
它可以解释你的错误。
如果你需要从后面的代码设置值,请执行以下操作:
sqldsUserLoginNLevelsUserID.UpdateParameters["UserID "].DefaultValue = "1";