【问题标题】:Procedure or function [sproc_name] expects parameter '@materials', which was not supplied过程或函数 [sproc_name] 需要参数“@materials”,但未提供该参数
【发布时间】:2011-02-04 19:51:33
【问题描述】:

这让我发疯了;)

我有这个存储过程...

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”,但未提供该参数。

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

谢谢。

【问题讨论】:

    标签: c# .net ado.net sqlconnection sqlparameter


    【解决方案1】:

    使用@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);
        }
    }
    

    【讨论】:

    • 我使用 LINQ 和实体框架的时间太长了。我忘了指定命令类型。我是个白痴,大声笑。 ;)
    【解决方案2】:

    在命名参数时,您需要将 @ 放入

    SqlParameter prmMaterials = new SqlParameter("@materials", SqlDbType.VarChar, 1000)
    

    【讨论】:

      【解决方案3】:

      您将参数称为“材料”和“功能”,而不是“@materials”和“@capabilities”

      【讨论】:

        【解决方案4】:

        我试过这样,它对我有用:

        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
        

        【讨论】:

          猜你喜欢
          • 2020-12-14
          • 2020-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多