Member 12683019 Ответов: 3

Я просто хочу вставить запись в базу данных, и она не работает. Какие изменения я должен внести?


An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code

Additional information: Procedure or function spInsertFunction has too many arguments specified.


Что я уже пробовал:

Способ действия контроллера

public ActionResult Create(FunctionByRole functionByRole)
       {
           FunByRoleFunctions obj = new FunByRoleFunctions();
           obj.AddFunctionByRole(functionByRole);

           return RedirectToAction("Index");
       }





Процедура Хранения Sql
create procedure [dbo].[spInsertFunction]
@RoleID int=0 output,
@FunctionID int
as
begin
insert into FunctionByRole values (@RoleID,@FunctionID)
set @RoleID=@@IDENTITY
end






функция add

public void AddFunctionByRole(FunctionByRole functionByRole)
        {
            string connectionString = ConfigurationManager.ConnectionStrings["ChequeVerificationContext"].ConnectionString;
            List<FunctionByRole> functionByRoles = new List<FunctionByRole>();
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("[spInsertFunction]", con);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@FunByRoleID", SqlDbType.Int).Value = functionByRole.FunByRoleID;
                cmd.Parameters["@FunByRoleID"].Direction = ParameterDirection.Output;

                cmd.Parameters.Add("@FunctionID", SqlDbType.Int).Value = functionByRole.FunctionID;
                cmd.Parameters["@FunctionID"].Direction = ParameterDirection.Input;


                cmd.Parameters.Add("@RoleID", SqlDbType.Int).Value = functionByRole.RoleID;
                cmd.Parameters["@RoleID"].Direction = ParameterDirection.Input;



                con.Open();
                cmd.ExecuteNonQuery();
                
            }
        }

[no name]

Неужели? Прочтите сообщение об ошибке. Посмотрите на свою хранимую процедуру и посмотрите на свою функцию. Видите ли вы вообще какую-либо корреляцию между сообщением об ошибке, вашей хранимой процедурой, которая принимает 2 параметра, и функцией, в которой вы вызываете хранимую процедуру с 3 параметрами?

3 Ответов

Рейтинг:
0

Suvendu Shekhar Giri

Вы определили 2 параметра в вашем сохраненном предусловии-

@RoleID int=0 output --output parameter
@FunctionID int --input parameter

Но, глядя на код, вы передаете больше параметров/значений-
cmd.Parameters.Add("@FunByRoleID", SqlDbType.Int).Value = functionByRole.FunByRoleID;
cmd.Parameters["@FunByRoleID"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@FunctionID", SqlDbType.Int).Value = functionByRole.FunctionID;
cmd.Parameters["@FunctionID"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@RoleID", SqlDbType.Int).Value = functionByRole.RoleID;
cmd.Parameters["@RoleID"].Direction = ParameterDirection.Input;

@FunByRoleID не определен в хранимой процедуре, и сообщение об ошибке ясно указывает на это. Судя по вашему коду, вам не нужен этот параметр. Поэтому попробуйте удалить этот раздел из кода, то есть следуя строчкам кода-
cmd.Parameters.Add("@FunByRoleID", SqlDbType.Int).Value = functionByRole.FunByRoleID;
cmd.Parameters["@FunByRoleID"].Direction = ParameterDirection.Output;


Или сделайте необходимые изменения и дайте мне знать, если это поможет или вам все еще нужна помощь в этом вопросе.

Спасибо :)


Рейтинг:
0

OriginalGriff

Посмотрите на свой код:

create procedure [dbo].[spInsertFunction]
@RoleID int=0 output,
@FunctionID int
as
begin
Два параметра.
SqlCommand cmd = new SqlCommand("[spInsertFunction]", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@FunByRoleID", SqlDbType.Int).Value = functionByRole.FunByRoleID;
cmd.Parameters["@FunByRoleID"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@FunctionID", SqlDbType.Int).Value = functionByRole.FunctionID;
cmd.Parameters["@FunctionID"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@RoleID", SqlDbType.Int).Value = functionByRole.RoleID;
cmd.Parameters["@RoleID"].Direction = ParameterDirection.Input;
Три параметра.
Затем посмотрите на сообщение об ошибке:
Procedure or function spInsertFunction has too many arguments specified.
SQL предполагает, что вы пытались вызвать неправильную функцию, ваша функция должна быть обновлена, чтобы соответствовать вашему коду , или наоборот-и отказывается запускать ее, пока вы не решите, какое изменение необходимо, и не сделаете его.


Рейтинг:
0

F-ES Sitecore

Ваша хранимая процедура имеет два аргумента: @RoleID и @FunctionID. Ваш код передает три: @FunByRoleID, @RoleID и @FunctionID. Вот почему он говорит, что вы передаете слишком много аргументов, поэтому не передавайте @FunByRoleID.