c# – 为什么我从存储过程中得到-1?
发布时间:2020-12-15 23:35:45 所属栏目:百科 来源:网络整理
导读:我使用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 C
我使用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或类似结果. 这是一个很好的例子: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |