C# 从实体框架调用时发生存储过程错误

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

我正在尝试构建一个简单的项目来运行我的存储过程

当我通过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 = 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分钟后我会批准的。