![](/img/trans.png)
[英]C#, ASP.NET core | SqlException: Incorrect syntax near the keyword 'TOP'
[英]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.