我正在对存储过程执行查询:
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);
我甚至需要指定任何内容,还是应该写<>
答案 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
等选择语句更新存储过程。
注意:不建议使用最后一个。