简体   繁体   English

从SqlQuery数据读取器问题执行存储过程

[英]execute stored procedure from SqlQuery data reader issue

so i am trying to execute my stored procedure as folowing 所以我试图按照以下方式执行存储过程

            String sql =
        "SET NOCOUNT ON; " +
        "DECLARE @id INT, @itemnumber nvarchar(20); " +
        "SELECT @id= '" + car.ID + "'" +
        "EXEC [file].[usp_iudCar] " +
        "@p_ID=@id OUTPUT," +
        "@p_Location= '" + location + "', " +
        "@p_ItemNumber=@itemnumber OUTPUT, " +
        "@p_DoerTicket= '" + userToken + "' " +
        "SELECT @id AS id, @itemnumber AS itemNumber; ";

            QueryParamCollection queryParams = new QueryParamCollection();
            queryParams.AddInt32Param(QueryParamName.CarID, (object)car.ID);
            queryParams.AddStringParam(QueryParamName.Location, (object)location);
            queryParams.AddStringParam(QueryParamName.DoerTicket, (object)userToken);

            var update = context.Database.SqlQuery<Int32>(sql).FirstOrDefault<Int32>();

            return update;

similar to when i doing it from query on the server as 类似于我从服务器上的查询中进行操作时

   DECLARE @return_value int,
            @p_ID int,
            @p_ItemNumber nvarchar(20)

    SELECT  @p_ID = 1783999

    EXEC    @return_value = [file].[usp_iudCar]
            @p_ID = @p_ID OUTPUT,
            @p_ItemNumber = @p_ItemNumber OUTPUT,
            @p_Location = N'test',
            @p_DoerTicket = N'0x0100000057065fc3a91f34c3f1f9cad41e2f5889bac6a68d3eab408dddc1cd54e57ce240565294f481f4f248bca4fb772d38fd737a6448dcbbfd9d58'

    SELECT  @p_ID as N'@p_ID',
            @p_ItemNumber as N'@p_ItemNumber'

    SELECT  'Return Value' = @return_value

    GO

result set 结果集 在此处输入图片说明

but i gets an execption 但我得到了执行

"ExceptionMessage": "The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types.", “ ExceptionMessage”:“数据读取器具有多个字段。多个字段对于EDM基本类型或枚举类型无效。

so how do i fix that or what is the correct way to do this? 那么我该如何解决呢?或者正确的方法是什么呢?

This error: 这个错误:

"ExceptionMessage": "The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types.", “ ExceptionMessage”:“数据读取器具有多个字段。多个字段对于EDM基本类型或枚举类型无效。

means that your stored procedure returns more than just one field. 意味着您的存储过程返回的不止一个字段。 This is what you are telling EF: 这就是您要告诉EF:

var update = context.Database.SqlQuery<Int32>(sql).FirstOrDefault<Int32>();

that the query returns a single field but clearly that is not the case or you would not get that error. 该查询返回单个字段,但显然不是这样,否则您将不会得到该错误。

Also that is not how to call a stored procedure using EF database first approach. 同样,这也不是使用EF数据库优先方法调用存储过程的方法。 Please refer this question and accepted answer for how to do what you want the proper way. 请参考问题和已接受的答案,以了解如何正确地做自己想做的事情。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法使用 SqlQuery 从存储过程中获取数据 - Cannot get data from stored procedure with SqlQuery 使用 SqlQuery 处理来自存储过程的多个结果 - Handle multiple result from a stored procedure with SqlQuery 如何使用返回值参数执行Entity Framework SQLQuery存储过程? - How to execute Entity Framework SQLQuery stored procedure with return value parameter? 无法使用db.Database.SqlQuery(sql)执行我的SQL Server存储过程 - Can't execute my SQL Server stored procedure using db.Database.SqlQuery(sql) 从WPF执行存储过程 - Execute stored procedure from WPF 如果 reader.ReadDataTable() 没有从数据库中的存储过程返回任何数据,则无法处理 - Can't handle if reader.ReadDataTable() doesn't return any DATA from stored procedure in database 为什么数据读取器不提供存储过程中的所有结果字段 - why data reader didn't serve all result fields from stored procedure 首先使用Database.SqlQuery从Entity Framework Code调用存储过程不起作用 - Calling stored procedure from Entity Framework Code First with Database.SqlQuery is not working Lightswitch执行选择的存储过程以显示数据 - Lightswitch execute a select stored procedure to display data 从.net应用程序执行Oracle存储过程 - Execute Oracle stored procedure from .net application
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM