2014-02-08 28 views
0

我的登錄表單在以前正常工作,但是因爲我添加了一個新行來獲取登錄用戶的LoginId,它只是爲第一條記錄(在登錄表中)以及所有剩下的,就說明這個錯誤沒有一行位置0在位置0處沒有行,在登錄頁面

這裏是我的代碼

SqlConnection con = new SqlConnection(@"Data Source=.\Aroona;Initial Catalog=ACSDatabase;Integrated Security=True;Pooling=False"); 
SqlDataAdapter loginadp = new SqlDataAdapter("SELECT * FROM Login WHERE username = '" + uName.Text + "' AND password = '" + pWord.Text + "' ", con); 

DataTable dt = new DataTable(); 
loginadp.Fill(dt); 
log_id = Convert.ToInt32(dt.Rows[0][0]); 
// MessageBox.Show("Your ID is : " + log_id); 
if (dt.Rows[0][0].ToString() == "1") 
{ 
    if (uName.Text == "Admin") 
    { 
     MPageAdmin mpa = new MPageAdmin(); 
     mpa.Show(); 
     this.Hide(); 
    } 
    else 
    { 
     Main_Page mp = new Main_Page(this.UserName,this.log_id); 
     mp.Show(); 
     this.Hide(); 
    } 
} 
else 
{ 
    label4.Visible = true; 
    label4.Text = "Username or Password Incorrect!"; 
} 

我加入這一行

log_id = Convert.ToInt32(dt.Rows[0][0]); 

但事實是,它不即使我將其刪除也可以工作。

爲什麼表中藥水0沒有排?

+1

你好,SQL注入。另外,爲什麼你期待2維數組? – 48klocs

+1

如果您的代碼沒有更改,那麼您的數據庫內容已更改。直接在您選擇的數據庫工具中運行結果查詢並查看返回結果。順便說一下:上面的代碼很容易被濫用於惡意SQL注入!請不要在敏感數據或任何測試項目之外使用它,請! – Krumelur

+0

我在行0列0上檢查它,依此類推。什麼可能是SQL注入的解決方案? – Aroona

回答

3

該行:There is no row at position 0.表示數據表中沒有行。

檢查dt當您逐句通過代碼時,您會注意到其中不會有行,很可能與數據庫中的內容相比,用戶名或密碼是錯誤的。

按照this site上的指南查看如何檢查數據表。

此外,您還需要檢查在執行任何代碼檢查行內容之前是否需要檢查dt.Rows.Count != 0,這將檢查是否實際上存在任何以此行開始的行。

+0

第一行正在工作 – Aroona