2017-09-19 3 views
1

Ich versuche ein einfaches Projekt zu erstellen, das meine gespeicherte Prozedur ausführt.Stored Procedure-Fehler beim Aufruf von Entity Framework

Wenn ich die SP über SQL-Server ausführen es funktioniert gut:

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' 

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

Ich erhalte eine Fehlermeldung:

Kein Zugriff auf die Paket oder das Paket existiert nicht. Stellen Sie sicher, dass das Paket vorhanden ist und dass der Benutzer über Berechtigungen verfügt.

Dieser Fehler tritt auf, wenn der Parameter package_name\folder_name\project_name nicht korrekt gesendet wird.

Wie kann ich Präfixwerte als Parameter übergeben?

+0

Sie den 'N nicht brauchen '...'' wickeln in Ihrem Code, das ist nur ein SQL-Server, was für Unicode-Konvertierung. Stattdessen tun Sie dies: "Value =" CalculateReports.dtsx "' – DavidG

+0

Funktioniert immer noch nicht .. der gleiche Fehler erscheint @DavidG – sagi

+0

Und Sie haben die 'N '...' von * all * Ihren Parametern entfernt? – DavidG

Antwort

3

Sie brauchen nicht die N'...' Wrap in Ihrem Code, das ist nur eine SQL Server-Sache für die Unicode-Konvertierung. Siehe zum Beispiel this. Wenn Sie das tun, übergeben Sie den Paketnamen N'CalculateReports.dtsx', der offensichtlich nicht existiert.

Stattdessen tut dies Value = "CalculateReports.dtsx", zum Beispiel:

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" 
}); 
+0

Vielen Dank. In 5 Minuten werde ich das genehmigen. – sagi

Verwandte Themen