1

これは私を夢中にさせています;)

私はこのストアドプロシージャを持っています...

ALTER PROCEDURE [dbo].[sproc_FindFoundries] 
    (@materials varchar(1000),
     @capabilities varchar(1000))
AS
BEGIN

 /* insert SQL code here */

END

このプロシージャは、カンマで区切られた 2 つの文字列を受け入れます。私のアプリケーションには、次のコードがあります。

BCDataContext db = new BCDataContext();
SqlParameter prmMaterials = new SqlParameter("materials", SqlDbType.VarChar, 1000);
prmMaterials.Value = materialList;
SqlParameter prmCapability = new SqlParameter("capabilities", SqlDbType.VarChar, 1000);
prmCapability.Value = capabilityList;

SqlConnection cn = new SqlConnection(db.Connection.ConnectionString);
SqlCommand cmd = new SqlCommand("sproc_FindFoundries", cn);
cmd.Parameters.Add(prmMaterials);
cmd.Parameters.Add(prmCapability);

SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

コードを実行すると、エラーが発生します

プロシージャまたは関数 [sproc_name] には、指定されていないパラメータ '@materials' が必要です。

データセットを埋めようとすると。テスト時に、両方のパラメーターにデータが含まれており、null でないことを確認しました。見逃したものはありますか?2 番目の目のペアをいただければ幸いです。

ありがとう。

4

4 に答える 4

7

@materials@capabilitiesパラメーターの名前として使用します。

using (BCDataContext db = new BCDataContext())
using (SqlConnection connection =  new SqlConnection(db.Connection.ConnectionString))
using (SqlCommand command = connection.CreateCommand())
{
    command.CommandText = "sproc_FindFoundries";
    command.CommandType = CommandType.StoredProcedure;

    command.Parameters.Add("@materials", SqlDbType.VarChar, 1000).Value = materialList;
    command.Parameters.Add("@capabilities", SqlDbType.VarChar, 1000).Value =  capabilityList;

    DataSet ds = new DataSet();
    using (SqlDataAdapter da = new SqlDataAdapter(command))
    {
        da.Fill(ds);
    }
}
于 2011-02-04T19:52:57.403 に答える
4

パラメータに名前を付けるときは、@ を入れる必要があります

SqlParameter prmMaterials = new SqlParameter("@materials", SqlDbType.VarChar, 1000)
于 2011-02-04T19:52:54.653 に答える
2

パラメータを「@materials」と「@capabilities」ではなく「materials」と「capabilities」と呼んでいます

于 2011-02-04T19:53:24.240 に答える
1

私はこのように試しました、それは私のために働いた:

int deal_id = 25;
_dbContext.Database.ExecuteSqlCommand("exec sp_getdeal @deal_id={0}", deal_id);

私の手順は次のとおりです。

ALTER PROCEDURE [dbo].[sp_getdeal]
(
    @deal_id INTEGER
)
AS
BEGIN
于 2012-06-06T07:08:49.313 に答える