我想检查用户是否有效。我给了我一个例外,当用户有效时它没有问题,但是如果用户无效则存在一些问题。
例外是:位置0没有行
以下是代码的一部分,
public bool CheckUserExistAndReporter(string user)
{
int reporterDnnId = -1;
SMSFunctionController mysms = new SMSFunctionController();
DataSet uds = mysms.GetUsersUnitByUserName(user);
reporterDnnId = Convert.ToInt32(uds.Tables[0].Rows[0]["DnnUserID"]);
if (reporterDnnId > 0)
{
bool isValidUser = true;
return isValidUser;
}
//else
//{
//bool isValidUser =false;
//return isValidUser;
// }
return false;
}
然后我在这里打电话给那个人。
if (!CheckUserExistAndReporter(user))
{
ErrorLog(messageIn);
msgOut = "ugyldig Bruker";//Invalid User.
}
错误是什么?
答案 0 :(得分:6)
在阅读完所有答案之后,我认为这个答案比其他答案更好,请在你的代码中加入If。
if(uds != null && uds.Tables.Count > 0 && uds.Tables[0].Rows.Count>0)
答案 1 :(得分:4)
您的方法mysms.GetUsersUnitByUserName(user)
正在返回一个空表。当您尝试访问时,可能无法满足选择标准。你收到了错误。如果您可以在访问数据行之前添加检查,则会更好。就像是。
if(uds != null && uds.Tables.Count > 0 && uds.Tables[0].Rows.Count > 0)
reporterDnnId = Convert.ToInt32(uds.Tables[0].Rows[0]["DnnUserID"]);
答案 2 :(得分:3)
Convert.ToInt32(uds.Tables[0].Rows[0]["DnnUserID"]);
您正在按索引访问一行。如果用户无效,可能没有行,因此索引超出范围。
如果您关心的是从数据库返回的记录,您可以执行以下操作:
bool isValid = uds.Tables[0].Rows.Count > 0;
更强大的检查是:
bool isValid = false;
if( uds.Tables[0].Rows.Count > 0 && (int)uds.Tables[0].Rows[0]["DnnUserID"] != default( int ) ){
isValid = true;
}
稍微清理一下:
var rows = uds.Tables[0].Rows;
bool isValid = rows.Count > 0 && (int)rows[0]["DnnUserID"] != default( int );
或者如果您需要转换(转换更便宜并且除非值不是Int32,否则将起作用):
var rows = uds.Tables[0].Rows;
bool isValid = rows.Count > 0 && Convert.ToInt32( rows[0]["DnnUserID"] ) != default( int );
答案 3 :(得分:2)
在访问[0]行中的userId之前,您还应该计算行数。
public bool CheckUserExistAndReporter(string user)
{
bool isValidUser = false;
SMSFunctionController mysms = new SMSFunctionController();
DataSet uds = mysms.GetUsersUnitByUserName(user);
if (uds != null && uds.Tables.Count > 0 && uds.Tables[0].Rows.Count>0)
{
// do further validation
var reporterDnnId = Convert.ToInt32(uds.Tables[0].Rows[0]["DnnUserID"]);
if (reporterDnnId > 0)
{
isValidUser = true;
}
}
return isValidUser;
}
答案 4 :(得分:2)
你可以这样做
if(uds.Tables[0].Rows.Count>0)
{
reporterDnnId = Convert.ToInt32(uds.Tables[0].Rows[0]["DnnUserID"]);
}
答案 5 :(得分:2)
我认为问题出在这一行reporterDnnId = Convert.ToInt32(uds.Tables[0].Rows[0]["DnnUserID"]);
上。在继续处理代码之前,您必须先检查if (uds.Tables[0].Rows.Count > 0)
。
if (uds.Tables[0].Rows.Count > 0)
{
reporterDnnId = Convert.ToInt32(uds.Tables[0].Rows[0]["DnnUserID"]);
...
答案 6 :(得分:2)
首先找出天气数据集是否包含任何记录,然后继续
if (uds.Tables[0].Rows.Count > 0)
{
// retrieve id and return it
}
else
{
return something which indicates record not found
}