2017-09-19 9 views
1

私はストアドプロシージャを実行する簡単なプロジェクトを構築しようとしています。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 = 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

をあなたは 'Nを必要としない「...」'それはUnicodeの変換のためにのみ、SQL Serverのことだ、あなたのコードでラップします。代わりに、これを行う: 'Value =" CalculateReports.dtsx "' – DavidG

+0

まだ動作しない..同じエラーが表示される@DavidG – sagi

+0

そしてあなたはあなたのパラメータから 'N '...''を削除しましたか? – DavidG

答えて

3

コードにはN'...'ラップは必要ありません。これは、ユニコード変換用の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" 
}); 
+0

ありがとうございます。 5分後に私はこれを承認するでしょう。 – sagi

関連する問題