【问题标题】:object cannot be cast from DBNULL to other types model mvc5对象不能从 DBNULL 转换为其他类型模型 mvc5
【发布时间】:2016-10-02 13:14:05
【问题描述】:

我正在使用 mvc5 创建一个 Web 应用程序我的数据库中有多个用户 例如

用户

user1) 用户名​​=ibrahim 密码=1ibrahim user2) 用户名​​=管理员密码=4321

当我从用户 1(ibrahim) 登录时,页面成功重定向到欢迎页面, 但是当我从用户登录到(管理员)时,错误来了

“System.InvalidCastException”类型的异常发生在 mscorlib.dll 但未在用户代码中处理

附加信息:对象不能从 DBNull 转换为其他 类型。

user = Convert.ToBoolean(cmd.ExecuteScalar());这一行

这是我的代码

    public class loginuser
    {
        SqlCommand cmd;
        public string role { get; set; }
        public string username { get; set; }
        public string password { get; set; }
        public bool getlogintype(string role, string username, string password)
        {

            string tru = "";
            string fals = "";
            bool user;
            string strname = "";
            SqlConnection con = new SqlConnection("Data Source=erp.hti-india.com,1434;Initial Catalog=erp;Connect Timeout=3600;User Id=erprakesh;Password=14erprakesh14");
            List<object> login = new List<object>();
            if (role == "Admin" || role == "Super Admin" || role !=null)
            {
                cmd = new SqlCommand("select * from [admin] where userid='" + username + "' and pass ='" + password + "'", con);
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);
                if (dt.Rows.Count > 0)
                {
                    user = true;
                    //HttpContext.Current.Session["userid"] = username.ToString();
                    //HttpContext.Current.Session["tru"] = tru.ToString();
                    // want to redirect to welcome page if condition satisfied.
                }
                else
                {
                    user = false;
                    //want to show the label error message(declare as string errormsg)
                }
                con.Close();
            }
con.Open();
            user = Convert.ToBoolean(cmd.ExecuteScalar());
            con.Close();
            return user;
        }
    }

【问题讨论】:

  • select * from 然后使用cmd.ExecuteScalar()??不知道你想做什么。
  • 我只想验证用户名和密码
  • @Ric 我应该用户选择像select userid,pass from admin这样的语句

标签: c# asp.net-mvc asp.net-mvc-5


【解决方案1】:

您的查询返回null,由DBNull.Value 表示。您应该在转换为布尔值之前检查一下:

object result = cmd.ExecuteScalar();
if (result == DBNull.Value)
{
    user = false; // or something like that
}
else
{
    user = Convert.ToBoolean(result);
}

请注意,您的语句容易受到 SQL 注入的攻击。始终使用参数化查询!还要小心你的select *。如果您添加列,您可能会遇到问题。只选择您需要的字段。

【讨论】:

  • 我如何返回结果,我需要转换吗?我遇到了一个错误
  • 我需要返回用户return result; 我试过这个return Convert.ToBoolean(result); 和这个
猜你喜欢
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
相关资源
最近更新 更多