新到的公司项目用EF+MVC,开始接触,遇到很多挫折,由于数据库设计原因,很多地方都要用视图、存储过程来实现一些需求。
调用存储过程遇到了好多问题,这边记录一下几种调用方式,及遇到的问题的解决方式。
存储过程:
ALTER PROCEDURE sp_Name(
@param1 INT,
@param2 INT,
@param3 BIT OUTPUT,
@param4 NVARCHAR(50) OUTPUT
)
AS
BEGIN
……
END
一、var entities = new DataEntities();
var param1 =0;
var param2 =1;
var param3 = new ObjectParameter("param3 ", DbType.Boolean);
var param4 = new ObjectParameter("param4 ", typeof(string));
entities.sp_Name(param1, param2 , param3 , param4 );
这边遇到的问题是开始param4 定义也是用param3的定义方式,但是一直报错,用SQL Server Profiler监测到param4的类型被定义成了int,完全摸不着头脑了,也百度不要类似的问题,然后开始找另外的存储过程调用方式。
二、
SqlParameter[] param ={
new SqlParameter("@param1 ",SqlDbType.Int),
new SqlParameter("@param2 ",SqlDbType.Int)
new SqlParameter("@param3 ",SqlDbType.Bit),
new SqlParameter("@param3 ",SqlDbType.Nvarchar,50)
};
param[0].Value = 0;
param[1].Value = 0;
param[2].Direction = ParameterDirection.Output;
param[3].Direction = ParameterDirection.Output;
var results = db.Database.SqlQuery<int>(
"sp_Name@param1 ,@param2 ,@param3 out,@param4 out",
param[0], param[1],param[2],param[3]);
或者
var results = db.Database.ExecuteSqlCommand(
"sp_Name@param1 ,@param2 ,@param3 out,@param4 out",
param[0], param[1],param[2],param[3]);
这样同样不行,因为后来发现上面的方式可以了就没有再深究具体什么原因不行。
以上是主要执行插入或者删除之类操作的存储过程,那么查询数据怎么获取到查到到的数据呢?
存储过程:
ALTER PROCEDURE sp_Name
@param1 VARCHAR(50),
@param2 INT OUTPUT
AS
BEGIN
SELECT * FROM tb_Name
END
代码:
var db = new DataEntities();
SqlParameter[] param ={
new SqlParameter("@param1",SqlDbType.VarChar,50),
new SqlParameter("@param2",SqlDbType.Int)};
param[0].Value = id;
param[1].Direction = ParameterDirection.Output;
var results = db.Database.SqlQuery<GenealogyData>(
"sp_MemberManager @id,@reval out",
param[0], param[1]);
param2= Convert.ToInt32(param[1].Value);
IList<Data> infoList = new List<Data>();
if (reval == 0)
{
infoList = results.ToList();
}
刚开始接触,仅仅记录一下,有什么不对的请多指教!