簡體   English   中英

數據庫MS Access 2007與C#ASP.net的連接,登錄頁面

[英]Database MS Access 2007 connection to C# ASP.net , login page

我有一個數據庫,其中包含一個名為“ User(login,password,firstname,lastname)”的表。 而且我需要登錄頁面。 我看了一些教程,但是沒有幫助。 我需要檢查數據庫中是否存在登錄名和密碼。 然后重定向(如果正確)到其他頁面。 這是我已經做過的:

OleDbConnection con = new OleDbConnection();
    public bool check()
    {
        con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Volodia\Documents\WebSiteDatabase.accdb";
        con.Open();
        string commandstring = "SELECT login,password FROM User";
        //objadapter = new SqlDataAdapter(CommandString, sqlconn.ConnectionString);
        OleDbDataAdapter objadapter = new OleDbDataAdapter(commandstring, con.ConnectionString);
        DataSet dataset = new DataSet();
        objadapter.Fill(dataset, "User");// it shows "Syntax error in FROM clause." here
        DataTable datatable = dataset.Tables[0];
        for (int i = 0; i < datatable.Rows.Count; i++)
        {
            string unam = datatable.Rows[i]["login"].ToString();
            string upwd = datatable.Rows[i]["password"].ToString();
            if ((unam == TextBox1.Text)&&(upwd==TextBox2.Text))
            {
                return true;
            }
        }

        return false;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (check() == true)
        {
            Response.Redirect("WebForm2.aspx");
        }
    }

密碼一詞是MS-Access Jet SQL的保留關鍵字。 如果要使用它,則需要將其用方括號括起來,與USER相同

 string commandstring = "SELECT login, [password] FROM [User]";

這將解決Syntax Error的直接問題,但讓我添加其他代碼以顯示不同的方法

 public bool check()
 {
    string conString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Volodia\Documents\WebSiteDatabase.accdb";
    using(OleDbConnection con = new OleDbConnection(conString)
    {
        con.Open();
        string commandstring = "SELECT count(*) as cntUser FROM [User] " + 
                               "WHERE login = ? AND [password] = ?";
        using(OleDbCommand cmd = new OleDbCommand(commandstring, con))
        {
            cmd.Parameters.AddWithValue("@p1", TextBox1.Text); 
            cmd.Parameters.AddWithValue("@p2", TextBox2.Text);
            int result = (int)cmd.ExecuteScalar();
            if(result > 0)
               return true;
        }
    }
    return false;
}
  • 首先,不要使用全局連接對象,而僅在需要時創建和使用連接。
  • 其次,使用using語句封裝諸如連接和命令之類的一次性對象,以確保正確的關閉和處理,
  • 第三,傳遞登錄名和密碼作為where子句的條件(稍后會詳細介紹)
  • 第四,使用參數化查詢來避免語法錯誤和sql注入

將密碼以明文形式存儲在數據庫中通常不是一個好習慣。 您只需要存儲密碼的哈希,並在每次需要檢查用戶真實性時重新計算此哈希

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM