好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

c# – 为什么我从存储过程中得到-1?

我使用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?的详细内容...

  阅读:40次