简体   繁体   English

从实体框架调用时存储过程错误

[英]Stored Procedure error when called from Entity Framework

I'm trying to build a simple project that will run my stored procedure . 我正在尝试构建一个将运行我的存储过程的简单项目。

When I execute the SP through SQL-Server it works fine : 当我通过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'

My controller: 我的控制器:

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

I'm getting an error : 我收到一个错误:

Cannot access the package or the package does not exist. 无法访问包或包不存在。 Verify that the package exists and that the user has permissions to it. 验证包是否存在以及用户是否具有该权限。

This error occurs when the parameters of package_name\\folder_name\\project_name is not sent correctly. 如果未正确发送package_name\\folder_name\\project_name的参数,则会发生此错误。

How can I pass prefix values as a parameter? 如何将前缀值作为参数传递?

You don't need the N'...' wrap in your code, that's only a SQL Server thing for unicode conversion. 你的代码中不需要N'...'换行,这只是用于unicode转换的SQL Server。 For example, see this . 例如,看到这个 So when you're doing that, you're actually passing the package name of N'CalculateReports.dtsx' which obviously doesn't exist. 所以,当你这样做时,你实际上传递的是N'CalculateReports.dtsx'的包名,这显然不存在。

Instead, do this Value = "CalculateReports.dtsx" , for example: 相反,请执行此Value = "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"
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM