try
{
conn.Open();
SqlCommand comm = conn.CreateCommand();
comm.CommandText = "select * from Admin where UserName='" + User + "'";
SqlDataReader reader = comm.ExecuteReader();
if (reader.Read())
{
string password = reader.GetString(reader.GetOrdinal("PassWord"));
string username = reader.GetString(reader.GetOrdinal("UserName"));
string useritem = reader.GetString(reader.GetOrdinal ("UserType"));//用戶級別
//MessageBox.Show(useritem);
MessageBox.Show(password);
MessageBox.Show(username);
if (password == Pwd)
{
if(useritem.Equals (uiterm))
MessageBox.Show("歡迎" + username);
new Thread(() => Application.Run(new Menu())).Start();
this.Close();
}
else
{
MessageBox.Show("密碼錯誤!");
UserName.Text = "";
PassWord.Text = "";
}
}
uj5u.com熱心網友回復:
哪個if判斷為真,哪個代碼塊沒執行uj5u.com熱心網友回復:
判斷password和Pwd那個,兩個相等,條件為真的,但是卻執行的是下面else塊里的陳述句uj5u.com熱心網友回復:
那兩個不相等,你在仔細檢查一下uj5u.com熱心網友回復:
字串里有沒有多個空格或者點之類的uj5u.com熱心網友回復:
是相等的啊,我把兩個分別顯示出來都是一樣的啊uj5u.com熱心網友回復:
沒有,就是單純的字串uj5u.com熱心網友回復:
在監視里添加三個值password, 看結果是什么
Pwd, 看結果是什么
password == Pwd ,看結果是true還是false
uj5u.com熱心網友回復:
截圖來看uj5u.com熱心網友回復:
if(useritem.Equals (uiterm))uj5u.com熱心網友回復:
你單步執行了嗎??只要是if判斷相等了肯定執行if里面的,要不然就不想等(if判斷不想等)uj5u.com熱心網友回復:
復制password == Pwd到即時視窗,看看結果uj5u.com熱心網友回復:
password == Pwd 沒有看到Pwd的定義,最好看下是否有空格,或者先判斷長度是否相等。uj5u.com熱心網友回復:
password.equals(pwd) 不就行了, 你只是看他倆長得一樣而已吧 == 比字串 又比不出東西來uj5u.com熱心網友回復:
==是最不可靠的比較,并且如果走else那么久可以證明一定不相等。個人建議你這樣來寫判斷
if (string.Compare(password, Pwd, true) == 0)
當然如果你通過MessageBox.show看到的結果是一致的但是走else,不防進行比較的時候 在password、Pwd后面加上一個.Trim();方法。
uj5u.com熱心網友回復:
你的程式開始罷工了,電腦核心開始反抗,小心你的電腦自動跳起打打你哦。uj5u.com熱心網友回復:
password/Pwd是什么型別的?字串不能這么判斷uj5u.com熱心網友回復:
如果確認兩個字串是一樣一樣的,重啟電腦,如果還不行,用360急救箱弄一下試試
還不行,就重裝系統吧! 電腦有問題了
uj5u.com熱心網友回復:
1.C# 中 對于 string 型別,== 會比較字串的值。 用==判斷是沒問題的。2.可能是字串前后有空格之類的字符,樓主 Show() 出來沒發現而已。
uj5u.com熱心網友回復:
絕對不相等,只是你認為相等。仔細對比一下吧。uj5u.com熱心網友回復:
這個回答牛B,大神啊!!!
uj5u.com熱心網友回復:
程式就是程式,相等就是相等,不可能出現你說的相等卻跑到else里去的,
看看是不是前后有空格,或者大小寫不同導致的,加上這句代碼,然后截圖出來看看:
MessageBox.Show("===" + password+"===" + Pwd + "===" );
uj5u.com熱心網友回復:
應該用strcmp來比較字串uj5u.com熱心網友回復:
if ( password.Trim().Upper() == Pwd.Trim().Upper() )
uj5u.com熱心網友回復:
application.run(form),這個代碼一定要在主執行緒里運行。如果不在主執行緒中運行訊息回圈,那行程到this.close就結束了,給你的錯覺就是if程式沒有運行。
uj5u.com熱心網友回復:
沒看清樓主的描述,請忽略我的回答。
uj5u.com熱心網友回復:
你判斷的是 MessageBox.Show(password);MessageBox.Show(username);
if (password == Pwd)
{
為啥顯示的是username
uj5u.com熱心網友回復:
reader.Read()如果有值能讀出來就為true執行里面的代碼,然后if (password == Pwd)里面相等就執行里面的代碼,其實你加個斷點放在reader.Read()那里,然后看看這個到底是否有值uj5u.com熱心網友回復:
話說,你到底是哪個if進不去?第一個沒問題的話:
string password = reader.GetString(reader.GetOrdinal("PassWord"));
string username = reader.GetString(reader.GetOrdinal("UserName"));
string useritem = reader.GetString(reader.GetOrdinal ("UserType"));//用戶級別
這三個都斷點看看,然后你那個password ==pwd也斷個點看看他到底是為true?因為兩個if不知道你說的哪個進不去
uj5u.com熱心網友回復:
樓主要單步除錯到那個 if 的地方,在監視里面調出兩個字串的值再手動比較一下,發截圖給大家看看。uj5u.com熱心網友回復:
這個貼好熱鬧uj5u.com熱心網友回復:
相等一定會執行,應該是不相等uj5u.com熱心網友回復:
字串的比較需要使用equals方法,即password.equals(pwd)。要小心空指標的問題,JDK8的話,推薦使用Objects.equals(password, pwd)。password == pwd比較的是兩個物件的記憶體地址是否相同,即兩個是不是同一個物件。而equals比較的是兩個值是否相等。
uj5u.com熱心網友回復:
額。我誤入了,以為是Java。原來是C#。。。uj5u.com熱心網友回復:
哈哈哈哈,這個回答太實用了,我感動哭了
uj5u.com熱心網友回復:
if ( password.Trim().Upper() == Pwd.Trim().Upper() )
這個邏輯不對吧,假如按照這樣,密碼應該是aBc,我輸入Abc,不是也通過了?
uj5u.com熱心網友回復:
MessageBox.Show(password);
MessageBox.Show(username);
if (password == Pwd)
你這個顯示有問題吧!建議使用equal,不要使用==。
uj5u.com熱心網友回復:
你自己認為它是真吧!但是編譯器不認為是真?說明你代碼有問題uj5u.com熱心網友回復:
這是啥語言?java?uj5u.com熱心網友回復:
字串的比較需要使用equals方法,即password.equals(pwd)。要小心空指標的問題,JDK8的話,推薦使用Objects.equals(password, pwd)。password == pwd比較的是兩個物件的記憶體地址是否相同,即兩個是不是同一個物件。而equals比較的是兩個值是否相等。
uj5u.com熱心網友回復:
為什么感覺是資料庫找不到同類名資料,因為我的也是這么錯的
uj5u.com熱心網友回復:
password.Trim() == Pwd.Trim() 這樣看下uj5u.com熱心網友回復:
執行false就是兩個不==嘛 字串的話用equa啦uj5u.com熱心網友回復:
是相等的啊,我把兩個分別顯示出來都是一樣的啊
uj5u.com熱心網友回復:
判斷password和Pwd那個,兩個相等,條件為真的,但是卻執行的是下面else塊里的陳述句
if (password == Pwd)
加個斷點一眼就看出來了啊
uj5u.com熱心網友回復:
肯定不是true哦,打個斷點,添加監視結果放出來看看 肯定是falseuj5u.com熱心網友回復:
不要用自己的眼睛來比較值uj5u.com熱心網友回復:
是不是輸入了空格,加上Trim()看看轉載請註明出處,本文鏈接:https://www.uj5u.com/net/38129.html
標籤:C#
