我创建了表值参数:
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?全部内容,希望文章能够帮你解决c# – 为什么我从存储过程中得到-1?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)