簡體   English   中英

SqlException:asp.net mvc 核心中@VariableName 附近的語法不正確

[英]SqlException: Incorrect syntax near @VariableName in asp.net mvc core

我正在嘗試使用 ASP.NET MVC 核心中的 MS SQL 中的存儲過程將數據(實際上是視頻)插入數據庫

我有這個代碼:

    [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”附近的語法不正確。

可能是什么原因?

更改如下:

[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);
}

請檢查:

    [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);
    }

問題在這里:

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

這不是你所說的SP。 理想的方法是將命令類型指定為CommandType.StoredProcedure ,並將"usp_AddNewVideoFile"指定為CommandText 如果由於FromSql而無法做到這一點,那么:

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

但是請注意,如果這是 EF FromSql ,那么將其用於插入命令可能並不理想; 您真的在尋找“執行非查詢”API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM