У меня возникают некоторые проблемы с обновлениями. Мне пришлось создать свой индивидуальный выбор, и поэтому я не мог делать динамические запросы. Я пытался обновить свою базу данных, используя код, приведенный ниже, но я всегда получаю эту ошибку:В процедуре указано слишком много аргументов
Procedure or function UpdateUser has too many arguments specified.
Я заполнил все аргументы, не больше, не меньше, не .... Что не так?
ASPX разметки:
<asp:SqlDataSource ID="AllUsers" runat="server"
ConnectionString="<%$ ConnectionStrings:LocalSQL %>"
SelectCommand="TodosOsUtilizadores" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
C# кода:
using (SqlDataSource ds = AllUsers)
{
Guid guid = new Guid();
try
{
guid = Guid.Parse(Session["user_id"].ToString());
}
catch
{
guid = Guid.NewGuid();
}
ds.UpdateCommand = "UpdateUser";
ds.ConflictDetection = ConflictOptions.OverwriteChanges;
ds.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;
ds.UpdateParameters.Add("userid", guid.ToString());
ds.UpdateParameters.Add("username", "Diogo");
ds.UpdateParameters.Add("email", "[email protected]");
ds.UpdateParameters.Add("isAnonimo", "0");
ds.UpdateParameters.Add("isLocked", "0");
ds.UpdateParameters.Add("roleId", "");
ds.Update();
DetailsView1.DataBind();
}
Хранимая процедура:
CREATE PROCEDURE [dbo].UpdateUser
@userid nvarchar(max),
@username nvarchar(200),
@email nvarchar(500),
@isAnonimo bit,
@isLocked bit,
@roleid nvarchar(max)
AS
UPDATE Memberships
SET Email = @email,
IsLockedOut = @isLocked
WHERE
UserId = CAST(@userid as uniqueidentifier);
UPDATE Users
SET UserName = @username,
IsAnonymous = @isAnonimo
WHERE
UserId = CAST(@userid AS uniqueidentifier);
IF (@roleid IS NULL)
BEGIN
UPDATE UsersInRoles
SET RoleId = CAST(roleid AS uniqueidentifier);
END;
Попробуйте указать параметры, включая '@'? Например. '.Add (" @ roleId "," ");' – Blorgbeard
Не тратьте [goids!] (Http://wasteaguid.info/) - 'Guid guid = Guid.Empty();' – asawyer
посмотреть, как используйте функцию Parameter.Add() и функцию Parameter.AddWithValue(), вам также нужно указать 'DataType' так, как вы ее используете. Я бы изменил' Add' на 'AddWithValue' таким образом, чтобы база данных могла обрабатывать разрешение типа данных – MethodMan