У меня есть база данных с хранимой процедурой внутри.Я пытаюсь выполнить процедуру с помощью SqlHelper.Однако я получаю странную ошибку.
public override User Insert(User entity)
{
var param = new SqlParameter() { Direction = ParameterDirection.Output, ParameterName = "@UserId", SqlDbType = SqlDbType.Int };
int result = SqlHelper.ExecuteNonQuery(_connectionString, "sp_User_Insert",
param,
new SqlParameter("@Name", entity.Name),
new SqlParameter("@Password", entity.Password),
new SqlParameter("@Created", entity.Created),
new SqlParameter("@LastAccessed", entity.LastAccessed),
new SqlParameter("@LastLogin", entity.LastLogin),
new SqlParameter("@Email", entity.Email),
new SqlParameter("@CommunityId", entity.Community.Id));
entity.Id = Convert.ToInt32(param.Value);
return entity;
}
Мой dataAccesLayer находится здесь в SqlHelper.cs:
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);
int retval = cmd.ExecuteNonQuery(); //Stops here with InvalidCastException.Failed to convert parameter value from a SqlParameter to a String.
cmd.Parameters.Clear();
return retval;
}
Моя хранимая процедура выглядит следующим образом:
ALTER PROCEDURE [dbo].[sp_User_Insert]
@UserId int OUTPUT,
@Name varchar(50),
@Password varchar(50),
@Created datetime,
@LastAccessed datetime,
@LastLogin datetime,
@Email nchar(50),
@CommunityId int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRANSACTION;
INSERT INTO [User]
VALUES( @Name,@Password,@Created,@LastAccessed,@LastLogin,@Email,@CommunityId);
SET @UserId = SCOPE_IDENTITY();
COMMIT TRANSACTION;
END
Я думал, что все сделал правильно, но не могу объяснить, почему я получил эту ошибку.Пожалуйста, сообщите! Спасибо ..