加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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或类似结果.

这是一个很好的例子:
Retrieve a DataTable using a SQL Statement

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读