2014-05-14 51 views
0
String user = Request.Form["username"]; 
    String Path = Server.MapPath("App_Data/Users.accdb"); 
    String connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path; 
    OleDbConnection conn = new OleDbConnection(connStr); 
    String sql = "SELECT * FROM Users WHERE UserName='" + user + "'"; 
    conn.Open(); 
    OleDbCommand cmd = new OleDbCommand(sql, conn); 
    OleDbDataReader myDataReader = cmd.ExecuteReader(); 
    if (myDataReader.Read()) 
    { 
     Response.Write("user exists"); 
     conn.Close(); 
    } 
    else 
     Response.Write("user does not exist"); 
    conn.Close(); 

的其他時候,甚至當我進入存在於數據庫中的值總是發生在Access中存在的用戶名,與未能檢查是否使用ACCDB

if (myDataReader.Read()) 

我用它在我的登錄頁面,它的工作原理是看用戶是否存在,我只是從中刪除了密碼部分。

通過這種方式是我用這個頁面

<form method="get" action="profile.aspx"> 
    <input type="text" name = "username" /><input type = "submit" value = "Search" /> 
</form> 
+0

遠程調試,當您執行查詢'SELECT * FROM Users'時,myDataReader包含什麼? –

+0

變量'user'的值是什麼?嘗試用'Response.Write(「user:」+ user +「:does not exist」)替換Response.Write;' – Steve

+0

我的某些表單有「method = get」,這是失敗的原因,現在好了,抱歉誤導你:S – user3575645

回答

-1

只是好奇形式...

你爲什麼不改變你的SQL返回一個值。

String sql = string.Format(@" DECLARE @IsExists BIT 
           SET @IsExists = 0x0 
           SELECT @IsExists = 0x1 FROM Users WHERE UserName='{0}' 
           SELECT @IsExists as 'IsExists' 
           ", user); 
conn.Open(); 
OleDbCommand cmd = new OleDbCommand(sql, conn); 
bool IsExists = Convert.ToBoolean(cmd.ExecuteScaler()); 
conn.Close(); 
return IsExists; 

僅供參考,我將使用用戶作爲參數,而不是像這樣構造字符串。

+0

-1:你知道SQL注入攻擊,但你通過展示如何遭受這樣的攻擊來回答。 –