我无法将SQL Select Query Result转换为Bit

时间:2017-08-27 17:07:40

标签: 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 + "'");
if(Convert.ToInt32(drlogin) == 0)
{
    string message = "<script>alert('You can't login because your account is not active!');</script>";
}
else
{
    // Login operations
}

3 个答案:

答案 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"]))