none
請問寫 LOGIN 登入程式 (驗證帳號 密碼 要使用 SQL 來做驗證) RRS feed

  • 一般討論

  • 寫好了一個 登入程式   但是 驗證 ID PASW  只能從  本機的  .DAT 檔裡面的文字 來驗證帳號密碼

    想從  SQL  裡面的  資料來做驗證  請問要如何寫

    2011年6月23日 上午 09:45

所有回覆

  • 這和你問的Combobox的問題意思差不多, 你可以透過 SqlDataReader讀取SQL 資料表中的自訂 ID, Password欄位, 再和使用者所輸入的TextBox內容比對即可

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年6月23日 上午 10:02
    版主
  • 您好

    在先前的發問中,您應該已經會從資料庫將資料撈出來

    http://social.msdn.microsoft.com/Forums/zh-TW/233/thread/115208d6-3e7e-4501-9324-21b234b55e47/#ea78fdc9-c878-4ea6-9cfc-15c43b069db9

    再將您輸入的帳號密碼與資料庫撈出來的資料作比對就可以了


    歡迎參觀我的Blog.NET菜鳥自救會

    2011年6月23日 上午 10:07
    版主
  • Hi,

    用類似下面的SQL語法,找尋符合ID跟密碼的資料筆數,資料比數大於0,代表驗證成功,資料比數等於0,驗證就失敗

    "Select * Form Account Where ID='{0}' AND PW='{1}'"


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年6月23日 上午 11:37
  • 您可以參考這個範例:Sample C# Windows Form Login Screen
    2011年6月23日 上午 11:43
  • 這裡有現成的程式碼,還教你怎麼改進耶~

    [ASP.NET]重構之路系列v1 – UI, Business logic, Data access概念分開

     


    Shadow與愉快的程式碼伙伴
    自High文不定期更新XD
    2011年6月23日 上午 11:47
  • 您好:

    先把 User 輸入的 id & password 分別記錄下來,然後再把值使用 SQL 語法代入去比對也行~


    逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12
    2011年6月23日 下午 02:26
  • 我寫這樣

     private void button1_Click(object sender, EventArgs e)

            {

     

                  try

                {

                    SqlConnection con = new SqlConnection("server=Data Source=.;Initial Catalog=dbrcm;Integrated Security=True;uid=sa;pwd=sa;database=menu");

                    con.Open();

                    SqlCommand cmd = new SqlCommand("select menu from fid where fpassword='" + this.ID.Text + "'", con);

                    int num = Convert.ToInt32(cmd.ExecuteScalar());

                    if (num == 1)

                    {

                        Form1 x = new Form1();

                        x.Show();

                        this.Hide();

                    }

                    else

                    {

                        MessageBox.Show("帳號密碼錯誤");

                        this.ID.Text = "";

                    }

                }

                catch (Exception ee)

                {

                    MessageBox.Show(ee.Message);

     

    可是還是沒辦法 查找耶
     SqlCommand cmd = new SqlCommand("select menu from fid where fpassword='" + this.ID.Text + "'", con);
    這段   只能  驗證  ID  但是  我要  ID  PASSW  一起驗證 請問要如何加進

    2011年6月24日 上午 02:55
  • Hi,

    用類似下面的SQL語法,找尋符合ID跟密碼的資料筆數,資料比數大於0,代表驗證成功,資料比數等於0,驗證就失敗

    "Select * Form Account Where ID='{0}' AND PW='{1}'"


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/

    這不就是範例了嗎
    2011年6月24日 上午 02:57
  • 請問 阿尼大

    是這樣寫沒錯麻  還是我有地方有寫錯

    發個 網址圖 給您

    http://www.flickr.com/photos/64417189@N04/5864966219/in/photostream

    2011年6月24日 上午 03:14
  • 您好

    請把程式碼的部分貼出來


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年6月24日 上午 03:22
    版主
  • 你的連線字串寫錯了

    SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=dbrcm;Integrated Security=True;");

    2011年6月24日 上午 03:23
  • 這是我 全部的 原始碼

     

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Windows.Forms;

    using prjCustomerSys;

    using System.Data.SqlClient;

     

     

    namespace prjCustomerSys

    {

        public partial class FrmLogin : Form

        {

     

            private bool iv_blnIsClosedForm = true;

     

     

     

     

     

     

            public FrmLogin()

            {

                InitializeComponent();

            }

     

            private void button1_Click(object sender, EventArgs e)

            {

     

                  try

                {

                    SqlConnection con = new SqlConnection("server=Data Source=.;Initial Catalog=dbrcm;Integrated Security=True;uid=sa;pwd=sa;database=menu");

                    con.Open();

                    SqlCommand cmd = new SqlCommand("select menu from fid where fpassword='" + ID.Text+ "'", con);

                    int num = Convert.ToInt32(cmd.ExecuteScalar());

                    if (num == 1)

                    {

                        Form1 x = new Form1();

                        x.Show();

                        this.Hide();

                    }

                    else

                    {

                        MessageBox.Show("帳號密碼錯誤");

                        this.ID.Text = "";

                    }

                }

                catch (Exception ee)

                {

                    MessageBox.Show(ee.Message);

     

     

     

     

     

     

     

     

     

     

     

            }

     

     

     

     

            }

    2011年6月24日 上午 03:46
  • 阿尼大

    不太清楚 錯在哪裡耶

    可以 重點

     點出麻  拜託

    2011年6月24日 上午 04:31
  • Hi,

    你前一篇的發問不是可以連嗎

    裡面的連線字串並沒有"server="

    SqlConnection con = new SqlConnection("server=Data Source=.;Initial Catalog=dbrcm;Integrated Security=True;uid=sa;pwd=sa;database=menu");


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年6月24日 上午 04:37
  • Hi:

    綠色說明是我建議修改的地方

     private void button1_Click(object sender, EventArgs e)
     {
    
     
    
           //server和DataSource請挑一個寫就好,登入驗證方式也請在Integrated Security和SQL驗證挑一個寫
    //Initial Catalog和database是一樣的意思,請挑一個寫就好
            SqlConnection con = new SqlConnection("DataSource=.;Initial Catalog=dbrcm;uid=sa;pwd=sa;");
    
            
            //只是要計算筆數的話,請把menu改成Count(*)
            //另外ID.Text呼叫Replace("'","''")多少防一下SQL Injection
            SqlCommand cmd = new SqlCommand("Select Count(*) from fid where fpassword='" + ID.Text.Replace("'","''")+ "'", con);
            con.Open();
            int num = Convert.ToInt32(cmd.ExecuteScalar());
            con.Close();//命令執行完請記得呼叫.Close();
            if (num >0)//改成大於0,表示此密碼在資料表中至少有一筆資料
    
            {
    
              Form1 x = new Form1();
    
              x.Show();
    
              this.Hide();
    
            }//End if
    
            else
    
            {
    
              MessageBox.Show("帳號密碼錯誤");
    
              this.ID.Text = "";
    
            }//End else
     }
    
    
    

     


    Shadow與愉快的程式碼伙伴
    自High文不定期更新XD
    2011年6月25日 下午 03:44
  • 用Replace 並不是防SQL Injection的好方法

    應該是使用參數查詢

     

    SqlCommand cmd = new SqlCommand("Select Count(*) from fid where fpassword=@fpassword", con);
    cmd.Parameters.AddWithValue("@fpassword", ID.Text);
    
    



    我有一個疑問 你的資料庫設計真的是 fid 是table name , fpassword 存 Id 的資料嗎? 

     


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年6月26日 上午 06:45
    1. SQL injection記得要用parameter,請參考:SqlCommand.Parameters 屬性
    2. connection打開,記得要關掉,兩種方式參考:
      a)使用using,請參考:http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlconnection(VS.80).aspx
      b)使用try/catch+finally,把connection.close()寫在finally裡面,確保 一定會關掉connection釋放資源

     


    常用資源參考:
    小弟的blog: In 91,wiki: my wiki
    2011年6月26日 下午 04:09