C# 我无法将SQL Select查询结果转换为Bit
用户注册后;默认情况下,用户的成员身份保存为被动。我是这样做的:在我的用户表中有一行名为active,该字段的数据类型为bit,默认值为0。我想做的是:如果用户没有激活他的帐户,我希望他得到警告,但我得到System.IConvertible错误。我的login.aspx.cs如下所示:C# 我无法将SQL Select查询结果转换为Bit,c#,sql,if-statement,type-conversion,sqldatatypes,C#,Sql,If Statement,Type Conversion,Sqldatatypes,用户注册后;默认情况下,用户的成员身份保存为被动。我是这样做的:在我的用户表中有一行名为active,该字段的数据类型为bit,默认值为0。我想做的是:如果用户没有激活他的帐户,我希望他得到警告,但我得到System.IConvertible错误。我的login.aspx.cs如下所示: DataRow drlogin = function.GetDataRow("SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'");
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
}
使用此SQL而不是您的SQL:
"SELECT ISNULL((SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'),0)"
首先,您应该使用参数,而不是用参数值填充查询字符串 其次,您可以转换为所需的类型,该类型看起来是一个整数:
SELECT CAST(isactive as int) as isactive
FROM user
WHERE email = '" + TxtEMail.Text + "'";
这句话是有毒的,一旦你发布它,机器人就会攻击你的网站:
DataRow drlogin = function.GetDataRow("SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'");
而不是字符串连接
不能将DataRow转换为Int32,此外,它是一个应转换为bool的位列。所以它应该是这样的:
if(!Convert.ToBoolean(drlogin[0]))
或
我在if代码行中得到了和错误。我怎么换这条线?
if(!Convert.ToBoolean(drlogin["isactive"]))