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

tongben11 2012-03-10 01:17:48

/// <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方法

public object ChaDB(String a )
{
Object cha = null;
SqlCommand comm = new SqlCommand(a, conn);
cha = comm.ExecuteScalar();
return cha;

}


求指教,为什么我在LoginUser里对比的时候会是FALSE呢,我之前做过验证,用MESSAGEBOX分别输出 用户输入的信息 和 数据库查询的信息都是一样的,而对比就会变成false。
...全文
218 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tongben11 2012-03-10
  • 打赏
  • 举报
回复
感谢各位的回答,我找到问题了,是因为我在SQL 定义 UserName 的数据类型时候定义为 不可变的 Nchar 以下是相关的一篇文章。
http://blog.sina.com.cn/s/blog_5dfb7f4d0100c3of.html
Anyi_xyz 2012-03-10
  • 打赏
  • 举报
回复
"SELECT [UserName] FROM [UserInfo] WHERE [UserName] = '{0}'"
tongben11 2012-03-10
  • 打赏
  • 举报
回复
:( 还是不对啊
  • 打赏
  • 举报
回复
string.Compare(a,dbhelper.ChaDB(SqlSearchName),false)就可以了
tongben11 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 marclee44 的回复:]
equals的确是值比较,==才是引用比较
好吧,看了下http://www.willasrari.com/blog/stringcompare-versus-stringequals/000189.aspx
equals并不是比较理想的比较字符串方法,改用Compare吧
[/Quote]

您好,您给的网址我没看懂- -我去网上找了些解释,我好像用不到那么复杂的比较方法,并且compare的第四个形参我没弄懂。:( 求指教 该怎么写。
(string.Compare(a,dbhelper.ChaDB(SqlSearchName),false,new CultureInfo("en-US"))) 这么写报错了
Marky 2012-03-10
  • 打赏
  • 举报
回复
equals的确是值比较,==才是引用比较
好吧,看了下http://www.willasrari.com/blog/stringcompare-versus-stringequals/000189.aspx
equals并不是比较理想的比较字符串方法,改用Compare吧
tongben11 2012-03-10
  • 打赏
  • 举报
回复
marclee44
我按着改了,也不对啊。
:)
tongben11 2012-03-10
  • 打赏
  • 举报
回复
也就是说不能用 equals 对比两个字符串是否相同? 它是对比了字符串的地址? 那该如何对比才是正确的呢。
另外我在 equals对比的时候 已经把 object类型 tostring了啊
求指教,谢谢
Marky 2012-03-10
  • 打赏
  • 举报
回复

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;

}

这样修改了试试
熙风 2012-03-10
  • 打赏
  • 举报
回复
ChaDB返回的是object类型,a是string类型
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
而字符串是一个特殊的引用型类型,在C#语言中,重载了string 对象的很多方法方法(包括equals()方法

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧