1

这让我发疯了;)

我有这个存储过程......

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

 /* insert SQL code here */

END

该过程接受两个逗号分隔的字符串。在我的应用程序中,我有以下代码。

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”。

当我尝试填充数据集时。测试时,我已验证两个参数都包含数据且不为空。有什么我错过的吗?第二双眼睛将不胜感激。

谢谢。

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”

于 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 回答