问题描述
我有一种获取用户列表的方法。有一个存储过程,应该是用户名或null。它根据该参数返回一个或多个用户。它在大多数情况下都能正常工作,但是我注意到有时即使我传递相同的确切参数也不会返回任何结果。我在“执行读取器异步”中放置了一个断点,并紧接其后的行。发生问题时,它会到达第一个断点,但不会到达第二个断点。它不会引发异常,也不会阻止我打电话。我可以拨打下一个电话,它将按预期返回结果。对于可能导致此问题的一些建议,我将不胜感激。
public async Task<List<User>> GetUsers(string username,int accountType = 1)
{
List<User> users = null;
parameters = new List<sqlParameter>{
new sqlParameter{
DbType = DbType.String,ParameterName = "@userName",Value = username.NotEmpty() ? username : (object) dbnull.Value
},new sqlParameter{
DbType = DbType.Int32,ParameterName = "@accountType",Value = accountType
}
};
try
{
using (sqlConnection con = new sqlConnection(conStr))
{
await con.OpenAsync();
using (sqlCommand cmd = new sqlCommand("spGetUsers",con))
{
cmd.Parameters.AddRange(parameters.ToArray());
cmd.CommandType = CommandType.StoredProcedure;
sqlDataReader dr = await cmd.ExecuteReaderAsync()
if (dr.HasRecord())
{
while (await dr.ReadAsync())
{
User user = new User();
user.FirstName = dr["firstName"].ToString();
user.LastName = dr["lastName"].ToString();
user.DateRegister = Convert.ToDateTime(dr["DateRegister"].ToString());
user.Active = Convert.ToBoolean(dr["Active"].ToString());
if(users == null)
{
users = new List<User>();
}
users.Add(user);
}
}
}
}
}
catch (Exception ex)
{
Util.LogError(ex.ToString());
users = null;
}
return users;
}
更新:
是,正在记录错误。另外,我在catch语句中添加了一个断点,以防引发错误。
以下是用于创建该存储过程的查询:
IF EXISTS (SELECT 1 FROM SYS.objects WHERE object_id = OBJECT_ID('spGetUsers') AND TYPE IN (N'PC',N'P'))
DROP PROCEDURE spGetUsers
GO
CREATE PROCEDURE spGetUsers
@userName nvarchar(50),@accountType int = 1
AS
BEGIN
SELECT U.firstName,U.lastName,U.DateRegister,A.Active
FROM [User] U
inner join UserAccount UA
on U.Id = UA.userid
inner join Account A
on A.Id = UA.accountId
WHERE U.Id > 0
AND UA.Id > 0
AND A.Id > 0
AND UA.AccountType IN (@accountType )
and (A.UserName in (@userName) or @userName IS NULL)
END
public static bool HasRecord(this System.Data.sqlClient.sqlDataReader dr)
{
if (dr != null && dr.HasRows)
{
return true;
}
return false;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)