C# 我无法将SQL Select查询结果转换为Bit

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 + "'");

用户注册后;默认情况下,用户的成员身份保存为被动。我是这样做的:在我的用户表中有一行名为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
}

使用此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"]))