我无法将 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
,此外它是一个应转换为bool
的bit
列。所以应该是这样的:
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 选择查询结果转换为位的主要内容,如果未能解决你的问题,请参考以下文章
如何将SQL查询结果转换为Excel表格推送给企业微信或钉钉的员工账号