2012-06-20 20 views
10

私はEntity Framework 4.2を使用しており、入力パラメータを持つストアドプロシージャを呼び出す必要があります。私はDatabase.ExecuteSqlCommandを使ってストアドプロシージャを呼び出しています。Database.ExecuteSqlCommandをパラメータとともに使用する正しい構文は何ですか?

ただし、パラメータを正しくマップするために、ドキュメントに正しい呼び出しの構文がありません。 私のgoogle-fooは私に失敗しており、何か助けに感謝します。

I.e.私は

Database.ExecuteSqlCommand("exec SetElementFrequency @p0 @p1", 
          elementType, frequency); 

Database.ExecuteSqlCommand("exec SetElementFrequency {0} {1}", 
          elementType, frequency); 

でそれを呼び出して試してみたが、彼らの両方が '@ p1の' 付近にエラー不適切な構文で失敗手順

procedure SetElementFrequency 
    @ElementTypeID integer, 
    @Frequency float 
as ... 

を持っています。

+3

これがTransact-SQLの場合は、パラメータ間にカンマがありません。 :) – bricelam

+1

当然ですが、もちろんです:) – SWeko

答えて

16

を、あなたは、のいずれかを使用することができます以下。

Database.ExecuteSqlCommand(
    "exec SetElementFrequency {0}, {1}", 
    elementType, frequency); 

または

Database.ExecuteSqlCommand("exec SetElementFrequency ?, ?", elementType, frequency); 

またParameterNameプロパティを経由して、独自の名前を提供するために、DbParameterベースのオブジェクトとしてelementTypefrequencyを指定することもできます。

2

はこのような何かを試してみてください:

context.Database.ExecuteSqlCommand("delete MasterSmsCampaignCertificateInfo where  MasterSmsCampaignGuid = @p0 and CertificateId = @p1", 
TheCampaignGuid, 
certInfo.CertificateId); 

は、この同様の質問を見てみましょう:あなたの基礎となるデータベース・プロバイダーによって ExecuteSqlCommand with output parameter 敬具

+0

これは、最初のパラメータが '@p0'に設定され、2番目が' @p1'に設定されるということですか? – SWeko

+0

そのように見える... – Oscar

+0

それを試して、動作しません – SWeko

2
var sql = @"Update [User] SET FirstName = {0} WHERE Id = {1}"; 
ctx.Database.ExecuteSqlCommand(sql, firstName, id); 
+0

この構文はうまくいきました。問題は私のクエリ形式でした。 – SWeko

+0

これは文脈を調整することなく、同様の質問からの別の答えのコピーです。 http://stackoverflow.com/a/5475210/642054 –

関連する問題