SqlException: неправильный синтаксис рядом с @VariableName в ядре asp. net mvc - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь вставить данные (фактически видео) в базу данных , используя хранимую процедуру в MS SQL в ASP. NET MVC core

I иметь этот код:

    [HttpPost]
    public async Task<IActionResult> Index(string title, IFormFile file, string filesize ,string filePath )
    {
        var Title= new SqlParameter("@Title", title);
        var UploadType = new SqlParameter("@UploadType", file.ToString());
        var FileSize = new SqlParameter("@FileSize", filesize);
        var FilePath = new SqlParameter("@FilePath", filePath);


        var insertVideo = _context.Lectures.FromSql("usp_AddNewVideoFile (@Title,@UploadType, @FileSize, @FilePath) ",parameters:new[] {Title,FileSize,FilePath,UploadType }).ToList();
        await _context.SaveChangesAsync();

        return RedirectToAction("Source",insertVideo);
    }

Хранимая процедура:

CREATE procedure [dbo].[usp_AddNewVideoFile]

@Title nvarchar(50),  
@UploadType nvarchar(50),
@FileSize int = null,  
@FilePath nvarchar(MAX)

as  
begin  

insert into Lectures(Name,FileSize,FilePath,UploadType)   
values (@Title,@FileSize,@FilePath,@UploadType)   

end 

Получение сообщения об ошибке:

SqlException: неверный синтаксис рядом '@Title'.

В чем может быть причина?

Ответы [ 3 ]

2 голосов
/ 01 мая 2020

Изменить как показано ниже:

[HttpPost]
public async Task<IActionResult> Test(string title, IFormFile file, int filesize, string filePath)
{
    var Title = new SqlParameter("@Title", title);
    var UploadType = new SqlParameter("@UploadType", file.ToString());
    var FileSize = new SqlParameter("@FileSize", filesize);
    var FilePath = new SqlParameter("@FilePath", filePath);

    //change this...    
    var insertVideo = _context.Database.ExecuteSqlCommandAsync("usp_AddNewVideoFile @Title,@UploadType,@FileSize, @FilePath", parameters: new[] { Title, UploadType, FileSize, FilePath });

    await _context.SaveChangesAsync();

    return RedirectToAction("Source", insertVideo);
}
0 голосов
/ 30 апреля 2020

Проблема здесь:

usp_AddNewVideoFile (@Title,@UploadType, @FileSize, @FilePath)

Это не совсем то, как вы называете SP; идеальный способ - указать тип команды как CommandType.StoredProcedure и просто указать "usp_AddNewVideoFile" как CommandText. Если это невозможно из-за FromSql, то:

EXEC usp_AddNewVideoFile @Title,@UploadType, @FileSize, @FilePath;

Обратите внимание, однако, что если это EF FromSql, то использование его для команды вставки, вероятно, не идеально; вы действительно ищете API «выполнить не запрос».

0 голосов
/ 30 апреля 2020

Проверьте это пожалуйста:

    [HttpPost]
    public async Task<IActionResult> Index(string title, IFormFile file, string filesize ,string filePath )
    {
        var Title= new SqlParameter("@Title", title);
        var UploadType = new SqlParameter("@UploadType", file.ToString());
        var FileSize = new SqlParameter("@FileSize", filesize);
        var FilePath = new SqlParameter("@FilePath", filePath);


        var insertVideo = _context.Lectures.FromSqlRaw("EXECUTE usp_AddNewVideoFile @Title, @FilePath, @FilePath, @UploadType", parameters:new[] {Title,FileSize,FilePath,UploadType }).ToList();
        await _context.SaveChangesAsync();

        return RedirectToAction("Source",insertVideo);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...