简体   繁体   English

使用EF6将参数传递给存储过程

[英]Passing parameters to stored procedure using EF6

I use sql-server 2012 in my project. 我在项目中使用sql-server 2012。

I have stored procedure, I fire and passing parameters to the stored procedure with help of entity framework 6 method called ExecuteSqlCommand . 我已经有了存储过程,我借助称为ExecuteSqlCommand的实体框架6方法将参数激发并将参数传递给存储过程。

 _context.database.ExecuteSqlCommand("SP_GetRecords", here all params)

One of the parameters that I try to sent to stored procedure is list of integers. 我尝试发送到存储过程的参数之一是整数列表。

I was advised to create table-valued parameters on sql-server and pass to it array or list. 建议我在sql-server上创建表值参数,然后将其传递给数组或列表。

But don't know how to pass this list or array of integers using ExecuteSqlCommand method to table-valued parameter. 但是不知道如何使用ExecuteSqlCommand方法将此表或整数数组传递给表值参数。

Any idea how to pass list or array type inside ExecuteSqlCommand ? 任何想法如何在ExecuteSqlCommand内部传递列表或数组类型?

Create your parameter 创建参数

 SqlParameter parameter = new SqlParameter();
 parameter.ParameterName = "@myData";
 parameter.SqlDbType = System.Data.SqlDbType.Structured;
 parameter.TypeName = "dbo.YourCustomTableType";
 parameter.Value = myDataTable;    

Execute as usual 照常执行

ctx.Database.ExecuteSqlCommand("EXEC SP_GetData @myData", parameter); 

We must create NpgsqlParameter and set parametr's name and type 我们必须创建NpgsqlParameter并设置参数的名称和类型

        var param1 = new NpgsqlParameter("param1", NpgsqlDbType.Array | NpgsqlDbType.Bigint) { Value = Enumerable.Range(0, 10).ToArray()};

        var param2 = new NpgsqlParameter("param2", NpgsqlDbType.Bigint){ Value = 1}

        return DataSet
            .FromSql("select function_name(@param1, @param2) as \"SomeName\"", parameters: new object[] { param1, param2 })
            .FirstAsync();
    }

And that's all 就这样

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM