C# 从实体框架调用时发生存储过程错误
我正在尝试构建一个简单的项目来运行我的存储过程 当我通过SQL Server执行SP时,它工作正常:C# 从实体框架调用时发生存储过程错误,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我正在尝试构建一个简单的项目来运行我的存储过程 当我通过SQL Server执行SP时,它工作正常: EXECUTE RunSSISPackage1 @folder_name1 = N'SSIS projects', @project_name1=N'CalculateReports', @package_name1=N'CalculateReports.dtsx', @param1 = N'2017-04-01 00:00:00', @param1name
EXECUTE RunSSISPackage1
@folder_name1 = N'SSIS projects',
@project_name1=N'CalculateReports',
@package_name1=N'CalculateReports.dtsx',
@param1 = N'2017-04-01 00:00:00',
@param1name = N'startDate'
我的控制器:
public IActionResult Test()
{
using (var cmd = _context.Database.GetDbConnection().CreateCommand())
{
cmd.CommandText = "RunSSISPackage";
cmd.CommandType = CommandType.StoredProcedure;
// set some parameters of the stored procedure
cmd.Parameters.Add(new SqlParameter("@package_name1", SqlDbType.NVarChar)
{
Value = "N'CalculateReports.dtsx'"
});
cmd.Parameters.Add(new SqlParameter("@folder_name1", SqlDbType.NVarChar)
{
Value = "N'SSIS projects'"
});
cmd.Parameters.Add(new SqlParameter("@project_name1", SqlDbType.NVarChar)
{
Value = "N'CalculateReports.dtsx'"
});
cmd.Parameters.Add(new SqlParameter("@param1", SqlDbType.NVarChar)
{
Value = "N'2017-04-01 00:00:00'"
});
cmd.Parameters.Add(new SqlParameter("@param1name", SqlDbType.NVarChar)
{
Value = "N'startDate'"
});
if (cmd.Connection.State != ConnectionState.Open)
cmd.Connection.Open();
cmd.ExecuteNonQuery();
return View();
}
}
我得到一个错误:
无法访问包或包不存在。验证包是否存在,以及用户是否具有对该包的权限
如果未正确发送package\u name\folder\u name\project\u name
的参数,则会发生此错误
如何将前缀值作为参数传递?您不需要将
N'…'
包装在代码中,这只是用于unicode转换的SQL Server功能。例如,请参见。因此,当您这样做时,实际上传递的是N'CalculateReports.dtsx'
的包名,它显然不存在
相反,请执行此操作,例如:
cmd.Parameters.Add(new SqlParameter("@package_name1", SqlDbType.NVarChar)
{
Value = "CalculateReports.dtsx"
});
cmd.Parameters.Add(new SqlParameter("@folder_name1", SqlDbType.NVarChar)
{
Value = "SSIS projects"
});
cmd.Parameters.Add(new SqlParameter("@project_name1", SqlDbType.NVarChar)
{
Value = "CalculateReports.dtsx"
});
cmd.Parameters.Add(new SqlParameter("@param1", SqlDbType.NVarChar)
{
Value = "2017-04-01 00:00:00"
});
cmd.Parameters.Add(new SqlParameter("@param1name", SqlDbType.NVarChar)
{
Value = "startDate"
});
您不需要将
N'…'
包装在代码中,这只是用于unicode转换的SQL Server功能。相反,这样做:Value=“CalculateReports.dtsx”
仍然不起作用。。同样的错误出现了@DavidG,你已经从所有参数中删除了N'…'
。@DavidG没关系,我还传递了一个错误的项目名称:X,我讨厌那个小错误。谢谢,它解决了我的问题。如果你愿意,你可以把它作为答案发布,我会批准。请只使用需要的标签。ASP.NET与您的问题完全无关,因此我已删除这些标记谢谢。5分钟后我会批准的。