在 SqlQuery<>(sql, parameters) 之后我需要 <> 吗?什么时候returns什么都没有?
Do I need <> after a SqlQuery<>(sql, parameters); when it returns nothing?
我正在对存储过程执行查询:
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 中返回一些数据,但现在它 returns 通过参数返回所有数据。
谁能给我解释一下。现在我不再返回 select 我应该在 <> 括号内放什么:
db.Database.SqlQuery<PutTestQuestionResponsesDTO>(sql, parameters);
我什至需要指定任何内容还是应该写 <>
MSDN 中描述的 SQLQuery<>
方法只有两个实现。
您正在使用方法的第一个重载版本。
定义
public DbRawSqlQuery<TElement> SqlQuery<TElement>(
string sql,
params Object[] parameters
)
所以从定义中可以清楚地看出,您需要在那里提供通用的,因此您必须像下面那样做。
SqlQuery<SomeClass>(sql, parameters);
您可以像 SqlQuery<SomeClass>(sql, parameters);
这样提供空的 class 来使用 hack。但是不知道会不会异常。
或者作为替代方案,您可以使用 select 语句更新存储过程,例如 select 1 from tablename
.
注:最后一个不推荐。
我正在对存储过程执行查询:
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 中返回一些数据,但现在它 returns 通过参数返回所有数据。
谁能给我解释一下。现在我不再返回 select 我应该在 <> 括号内放什么:
db.Database.SqlQuery<PutTestQuestionResponsesDTO>(sql, parameters);
我什至需要指定任何内容还是应该写 <>
MSDN 中描述的 SQLQuery<>
方法只有两个实现。
您正在使用方法的第一个重载版本。
定义
public DbRawSqlQuery<TElement> SqlQuery<TElement>(
string sql,
params Object[] parameters
)
所以从定义中可以清楚地看出,您需要在那里提供通用的,因此您必须像下面那样做。
SqlQuery<SomeClass>(sql, parameters);
您可以像 SqlQuery<SomeClass>(sql, parameters);
这样提供空的 class 来使用 hack。但是不知道会不会异常。
或者作为替代方案,您可以使用 select 语句更新存储过程,例如 select 1 from tablename
.
注:最后一个不推荐。