这让我疯了;)
我有这个存储过程...
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',这是未提供的。
当我尝试填充数据集时。在测试时,我已经验证两个参数都包含数据并且不为空。有没有我错过的东西?非常感谢第二双眼睛。
感谢。
答案 0 :(得分: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);
}
}
答案 1 :(得分:4)
命名参数时,需要将@ in放在
中SqlParameter prmMaterials = new SqlParameter("@materials", SqlDbType.VarChar, 1000)
答案 2 :(得分:2)
您正在调用参数“材料”和“功能”而不是“@materials”和“@capabilities”
答案 3 :(得分: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
答案 4 :(得分:0)