读书人

关于从数据库查询信息和对比的有关问题

发布时间: 2012-03-21 13:33:15 作者: rapoo

关于从数据库查询信息和对比的问题,求高人指教谢谢。

C# code
        /// <summary>        /// 连接数据库判断用户输入的用户名密码是否正确,以下仅判断用户名是否在数据库中存在        /// </summary>        /// <param name="a">用户输入的用户名</param>        /// <param name="b">用户输入的密码</param>        /// <returns>如果为true则 用户名和密码 与数据库中的信息符合</returns>        public bool LoginUser(String a, String b)        {            dbhelper.OpenDB();            bool IsOk = false;             String SqlSearchName = String.Format("SELECT [UserName] FROM [UserInfo] WHERE '{0}' = [UserName]",a);             if (a.Equals(dbhelper.ChaDB(SqlSearchName).ToString()))             {                 IsOk = true;             }            return IsOk;        }


以下是chaDB方法
C# code
        public object ChaDB(String a )        {            Object cha = null;            SqlCommand comm = new SqlCommand(a, conn);            cha = comm.ExecuteScalar();            return cha;        }


求指教,为什么我在LoginUser里对比的时候会是FALSE呢,我之前做过验证,用MESSAGEBOX分别输出 用户输入的信息 和 数据库查询的信息都是一样的,而对比就会变成false。

[解决办法]
ChaDB返回的是object类型,a是string类型
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
而字符串是一个特殊的引用型类型,在C#语言中,重载了string 对象的很多方法方法(包括equals()方法

[解决办法]
C# code
        public bool LoginUser(String a, String b)        {            dbhelper.OpenDB();            bool IsOk = false;             String SqlSearchName = String.Format("SELECT [UserName] FROM [UserInfo] WHERE '{0}' = [UserName]",a);             if (a.Equals(dbhelper.ChaDB(SqlSearchName)))             {                 IsOk = true;             }            return IsOk;        }        public string ChaDB(String a )        {            Object cha = null;            SqlCommand comm = new SqlCommand(a, conn);            cha = comm.ExecuteScalar();            return (string)cha;        }
[解决办法]
equals的确是值比较,==才是引用比较
好吧,看了下http://www.willasrari.com/blog/stringcompare-versus-stringequals/000189.aspx
equals并不是比较理想的比较字符串方法,改用Compare吧

读书人网 >C#

热点推荐