【问题标题】:I can't Convert SQL Select Query Result to Bit我无法将 SQL 选择查询结果转换为位
【发布时间】: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
}

【问题讨论】:

    标签: c# sql if-statement type-conversion sqldatatypes


    【解决方案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”代码行中出现错误。我怎样才能改变这条线?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        • 1970-01-01
        相关资源
        最近更新 更多