Процедура или функция [sproc_name] ожидает параметр '@materials', который не был предоставлен - PullRequest
1 голос
/ 04 февраля 2011

Это сводит меня с ума;)

У меня есть эта хранимая процедура ...

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', который не был предоставлен.

когда я пытаюсь заполнить набор данных. При тестировании я убедился, что оба параметра содержат данные и не являются нулевыми. Я что-то пропустил? Вторая пара глаз будет с благодарностью.

Спасибо.

Ответы [ 5 ]

7 голосов
/ 04 февраля 2011

Используйте @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);
    }
}
4 голосов
/ 04 февраля 2011

Когда вы называете свои параметры, вы должны поставить @ in

SqlParameter prmMaterials = new SqlParameter("@materials", SqlDbType.VarChar, 1000)
2 голосов
/ 04 февраля 2011

Вы называете ваши параметры "материалы" и "возможности" вместо "@materials" и "@capabilities"

1 голос
/ 06 июня 2012

Я пытался так, у меня это сработало:

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
0 голосов
/ 29 февраля 2012

проверить эту ссылку для аналогичного вопроса http://www.codeproject.com/Answers/336809/gridview-update-exception#answer2

...