用户注册后;默认情况下,用户的成员资格被保存为“被动”。我通过以下方式执行此操作:我的用户表中有一个名为“active”的行,该字段的数据类型为bit,此字段的默认值为0.我想要做的是:如果用户没有激活他的帐户,我希望他得到警告,但我得到System.IConvertible错误。我的login.aspx.cs如下:
DataRow drlogin = function.GetDataRow("SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'");
if(Convert.ToInt32(drlogin) == 0)
{
string message = "<script>alert('You can't login because your account is not active!');</script>";
}
else
{
// Login operations
}
答案 0 :(得分:2)
首先,您应该使用参数,而不是使用参数值来修改查询字符串。
其次,您可以转换为您想要的类型,它似乎是一个整数:
SELECT CAST(isactive as int) as isactive
FROM user
WHERE email = '" + TxtEMail.Text + "'";
答案 1 :(得分:0)
使用此SQL而不是您的:
"SELECT ISNULL((SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'),0)"
答案 2 :(得分:0)
这条线是有毒的,机器人会在您发布后立即破解您的网站:
DataRow drlogin = function.GetDataRow("SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'");
Use parameters而不是字符串连接!
您无法将DataRow
转换为Int32
,除了bit
列应转换为bool
。所以它应该是这样的:
if(!Convert.ToBoolean(drlogin[0]))
或
if(!Convert.ToBoolean(drlogin["isactive"]))