我使用SQL Server 2012和Entity Framework6.
我创建了表值参数:
CREATE TYPE IdArray AS TABLE ( Id int );
在这里我的存储过程:
ALTER PROCEDURE [dbo].[SP_TEST_TLP] @List dbo.IdArray READONLY AS BEGIN SET NOCOUNT ON; SELECT * FROM Clients WHERE Clients.Id IN (select Id from @List) END
从Visual Studio我调用存储过程并将参数传递给存储过程.
我是这样做的:
创建DataTable:
var myDataTable = new DataTable(); myDataTable.Columns.Add("Id", typeof(int)); myDataTable.Rows.Add(1); myDataTable.Rows.Add(3); myDataTable.Rows.Add(6);
从DataTable创建SqlParameter:
SqlParameter parameter = new SqlParameter(); parameter.ParameterName = "@List"; parameter.SqlDbType = System.Data.SqlDbType.Structured; parameter.TypeName = "dbo.IdArray"; parameter.Value = myDataTable;
Fire存储过程和传递参数:
var data = _context.Database.ExecuteSqlCommand("SP_TEST_TLP @List", parameter);
问题是ExecuteSqlCommand返回-1.
为什么ExecuteSqlCommand在我期望来自数据库的行时返回-1?
更新:
更改此行:WHERE Clients.Id IN(‘@ List’)
对此:WHERE Clients.Id IN(从@List中选择Id)
ExecuteSqlCommand返回一个int,用于操作查询(Insert,Update)并返回受单个非查询影响的行数. 尝试使用ExecuteDataTable或类似结果.这是一个很好的例子:
Retrieve a DataTable using a SQL Statement查看更多关于c# – 为什么我从存储过程中得到-1?的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did69318