我正在尝试构建一个运行我的存储过程的简单项目。
当我通过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_name\folder_name\project_name
的参数,则会发生此错误。
如何将前缀值作为参数传递?
答案 0 :(得分:3)
您不需要代码中的N'...'
换行,这只是用于unicode转换的SQL Server。例如,请参阅this。因此,当您执行此操作时,您实际上传递的N'CalculateReports.dtsx'
包名称显然不存在。
相反,请执行此操作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"
});