我需要<>在SqlQuery<>(sql,参数)之后;什么时候什么也没有?

时间:2015-02-09 11:49:17

标签: asp.net sql-server asp.net-web-api

我正在对存储过程执行查询:

var sql = @"dbo.sp_put_question_responses @AnswerGridResponses,
                                                      @UpdateRowCount OUT,
                                                      @UserId,      
                                                      @UserTestQuestionId";
            var parameters = new SqlParameter[]
                        {  
                            new SqlParameter("@AnswerGridResponses", answerGridResponses),
                            new SqlParameter("@UpdateRowCount", SqlDbType.Int) { Direction = ParameterDirection.Output },
                            new SqlParameter("@UserId", userId),
                            new SqlParameter("@UserTestQuestionId", userTestQuestionId)
                        };

            var query = db.Database.SqlQuery<PutTestQuestionResponsesDTO>(sql, parameters);
            var putTestQuestionResponses = await query.FirstOrDefaultAsync();
            var updateRowCount = (int)parameters[1].Value;
            if (updateRowCount == 0) return BadRequest(); else return Ok();

存储过程在这里:

CREATE PROCEDURE [dbo].[sp_put_question_responses] 
    @AnswerGridResponses     VARCHAR(20),   
    @UpdateRowCount     INT OUTPUT,
    @UserId             INT, 
    @UserTestQuestionId INT
AS
BEGIN   
      UPDATE  UserTestQuestion      
      SET     AnswerGridResponses = @AnswerGridResponses,
              Answered = 1
      WHERE   UserTestQuestionId = @UserTestQuestionId
      AND     UserId = @UserId
      SET    @UpdateRowCount = @@ROWCOUNT
END

以前它在SELECT中返回了一些数据,但现在它通过参数返回所有内容。

有人可以向我解释。现在,我不再返回选择我将放在&lt;&gt;内的内容括号:

 db.Database.SqlQuery<PutTestQuestionResponsesDTO>(sql, parameters);

我甚至需要指定任何内容,还是应该写<>

1 个答案:

答案 0 :(得分:1)

MSDN中描述的SQLQuery<>方法只有两种实现。

您正在使用方法的第一个重载版本。

<强>定义

public DbRawSqlQuery<TElement> SqlQuery<TElement>(
    string sql,
    params Object[] parameters
)

所以从定义中可以清楚地看出,你需要在那里提供通用,所以你必须这样做。

SqlQuery<SomeClass>(sql, parameters);

您可以像提供SqlQuery<SomeClass>(sql, parameters);之类的空类一样使用hack。但我不确定它是否会导致例外。

或者作为替代方法,您可以使用select 1 from tablename等选择语句更新存储过程。

注意:不建议使用最后一个。