我无法将 SQL 选择查询结果转换为位

Posted

技术标签:

【中文标题】我无法将 SQL 选择查询结果转换为位【英文标题】:I can't Convert SQL Select Query Result to Bit 【发布时间】:2018-02-05 00:51:18 【问题描述】:

用户注册后;用户的成员资格默认保存为“被动”。我通过以下方式执行此操作:我的用户表中有一条名为“活动”的行,该字段的数据类型为位,该字段的默认值为 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

【问题讨论】:

【参考方案1】:

这条线有毒,你一发布,机器人就会入侵你的网站:

DataRow drlogin = function.GetDataRow("SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'");

Use parameters 而不是字符串连接!

您不能将DataRow 转换为Int32,此外它是一个应转换为boolbit 列。所以应该是这样的:

if(!Convert.ToBoolean(drlogin[0]))

if(!Convert.ToBoolean(drlogin["isactive"]))

【讨论】:

【参考方案2】:

首先,您应该使用参数,而不是使用参数值修改查询字符串。

其次,你可以转换成你想要的类型,看起来是一个整数:

SELECT CAST(isactive as int) as isactive
FROM user
WHERE email = '" + TxtEMail.Text + "'";

【讨论】:

【参考方案3】:

用这个 SQL 代替你的:

"SELECT ISNULL((SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'),0)"

【讨论】:

我在“if”代码行中出现错误。我怎样才能改变这条线?

以上是关于我无法将 SQL 选择查询结果转换为位的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL - 将选择计数(*)转换为零或一

无法让 SQL Server 子查询选择所需的结果

如何将SQL查询结果转换为Excel表格推送给企业微信或钉钉的员工账号

SQL中,我想把SQL查询分析器查询出来的结果,导出到EXCEL表格,求各位大侠指点。

在 C++ 中将字符或字符串转换为位集

无法将 MySQL 日期/时间值转换为 System.DateTime