使用 Entity Framework SqlQuery 在存储过程中传递输入参数
Pass a input parameter in Stored Procedure using Entity Framework SqlQuery
如何在MVC 的业务层的存储过程中传递输入参数。
正常的 select 查询像这样工作正常,我如何在其中传递输入参数。
例如:
public List<Customer> GetCustomer()
{
List<Customer> Cust = null;
Cust = db.Database.SqlQuery<Customer>("sp_cust").ToList();
return Cust;
}
SP
create procedure sp_cust
as
begin
select ID from tblCustomer WITH (NOLOCK)
end
Input parameter SP
create procedure sp_cust
@name varchar(20)
as
begin
select ID from tblCustomer WITH (NOLOCK)
where name = @name
end
I tried
public List<Customer> GetCustomer()
{
List<Customer> Cust = null;
string name = "MVC";
Cust = db.Database.SqlQuery<Customer>("sp_cust",name).ToList();
Cust = db.Database.SqlQuery<Customer>("sp_cust",@name).ToList();
Cust = db.Database.SqlQuery<Customer>("sp_cust","@name").ToList();
return Cust;
}
为什么没用?
您使用命名参数占位符,然后将其绑定到 SqlParameter
:
mediaCat = db.Database
.SqlQuery<Customer>("exec sp_cust @name",
new SqlParameter("@name", name)).ToList();
但是请注意,它 isn't good practice 为 Sql 服务器中的存储过程添加前缀 sp
(假设这是 RDBMS),并使用未提交的读取 (NOLOCK)
可能会导致意外结果 - 如果您的数据库中存在锁定或性能相关问题,请修复索引和查询。
编辑多个参数
SqlQuery takes a params object[]
,所以你想传多少参数就传多少:
.SqlQuery<Customer>("exec sp_cust @param1, @param2",
new SqlParameter("@param1", valueForParam1),
new SqlParameter("@param2", valueForParam2)
).ToList();
如何在MVC 的业务层的存储过程中传递输入参数。 正常的 select 查询像这样工作正常,我如何在其中传递输入参数。 例如:
public List<Customer> GetCustomer()
{
List<Customer> Cust = null;
Cust = db.Database.SqlQuery<Customer>("sp_cust").ToList();
return Cust;
}
SP
create procedure sp_cust
as
begin
select ID from tblCustomer WITH (NOLOCK)
end
Input parameter SP
create procedure sp_cust
@name varchar(20)
as
begin
select ID from tblCustomer WITH (NOLOCK)
where name = @name
end
I tried
public List<Customer> GetCustomer()
{
List<Customer> Cust = null;
string name = "MVC";
Cust = db.Database.SqlQuery<Customer>("sp_cust",name).ToList();
Cust = db.Database.SqlQuery<Customer>("sp_cust",@name).ToList();
Cust = db.Database.SqlQuery<Customer>("sp_cust","@name").ToList();
return Cust;
}
为什么没用?
您使用命名参数占位符,然后将其绑定到 SqlParameter
:
mediaCat = db.Database
.SqlQuery<Customer>("exec sp_cust @name",
new SqlParameter("@name", name)).ToList();
但是请注意,它 isn't good practice 为 Sql 服务器中的存储过程添加前缀 sp
(假设这是 RDBMS),并使用未提交的读取 (NOLOCK)
可能会导致意外结果 - 如果您的数据库中存在锁定或性能相关问题,请修复索引和查询。
编辑多个参数
SqlQuery takes a params object[]
,所以你想传多少参数就传多少:
.SqlQuery<Customer>("exec sp_cust @param1, @param2",
new SqlParameter("@param1", valueForParam1),
new SqlParameter("@param2", valueForParam2)
).ToList();