2013-12-18 61 views
-4

我做了一個asp.net應用程序,我試圖從sql表中讀取數據,但數據只是不會比較,因爲我沒有收到消息「噸有一個銀行帳戶,你不能註冊到我們的網站」從數據庫獲得價值不如預期

SqlConnection connection = new SqlConnection(@"Data Source=SHKELQIM\SQLEXPRESS;Initial Catalog=E-Banking;Integrated Security=True"); 

connection.Open(); 
SqlDataReader reader = null; 
SqlCommand command = new SqlCommand("SELECT * FROM ACCOUNTS WHERE Accountnumber='" + accountnumber1.Text + "'", connection); 
reader = command.ExecuteReader(); 

if (reader.Read()) 
{ 
    string getAccountNumber = reader[0].ToString(); 
    reader.Close(); 

    if (getAccountNumber != accountnumber1.Text) 
    { 
     lblaccountnumber.Visible = true; 
     lblaccountnumber.Text = "You don't have a bank account, you can't register to our website"; 
    } 
} 
+4

請[編輯]你的問題標題的東西,是描述你的問題。 「這只是不行」這是完全沒有意義的,並且對於本網站的未來用戶試圖找到他們問題的解決方案的搜索結果沒有任何價值。謝謝。 –

+1

你有沒有試過輸出reader [0] .ToString()到控制檯,看看有什麼? – devilfish17

+3

嗯......也許賬號是'123'; DROP TABLE ACCOUNTS; - '。我認識一個名叫[Bobby]的人(http://bobby-tables.com/),他有這個帳號! –

回答

1

我會檢查reader.HasRows財產和顯示信息

using (SqlConnection connection = new SqlConnection(@"Data Source=SHKELQIM\SQLEXPRESS;Initial Catalog=E-Banking;Integrated Security=True")) 
using(SqlCommand command = new SqlCommand("SELECT * FROM ACCOUNTS WHERE Accountnumber= @Accountnumber", connection)) 
{ 
    command.Parameters.AddWithValue("Accountnumber", accountnumber1.Text); 
     connection.Open(); 
    using(SqlDataReader reader = command.ExecuteReader()) 
    { 
     if (!reader.HasRows) 
     { 
      lblaccountnumber.Visible = true; 
      lblaccountnumber.Text = "You don't have a bank account, you can't register to our website"; 
     } 
    } 

} 
+0

感謝一百萬人,這工作得很好,因爲!=比較沒有工作,我只是不知道爲什麼,但這工作,謝謝很多人,你幫助我很大 –

4

找到這個問題的最好辦法是把一個破發點就行了:

if (getAccountNumber != accountnumber1.Text) 

,看看爲什麼值不匹配。

我的猜測是該帳號不是您的SELECT *查詢中的第一列,因此reader[0].ToString()並非真正的帳號,而是另一個值。相反,通過列名獲取列索引,就像這樣:

string getAccountNumber = reader.GetString(reader.GetOrdinal("Accountnumber")); 

這也將是使用參數化查詢,這樣你就不會從Little Bobby Tables得到訪問一個偉大的想法。

下面是一個使用參數化查詢代碼:

string theQuery = "SELECT * FROM ACCOUNTS WHERE [email protected]"; 

SqlCommand command = new SqlCommand(theQuery, connection); 
command.Parameters.AddWithValue("@AccountNumber", accountnumber1.Text); 

reader = command.ExecuteReader(); 
+0

是的,但OP似乎期待他們不相等,從而顯示消息。 – ethorn10

+1

@ ethorn10 - 好點,用我的新「猜測」對問題進行更新。 –

+0

非常感謝您的評論,我強烈確認帳號是我表中的第一列,因爲當我更改!= == ==它完美的工作,但!=比較不起作用,我從來沒有遇到過問題像這樣 –