2012-02-14 72 views
0

嗨,我搜索了很多關於這個問題,我似乎無法理解用戶所做的大部分編碼,我很喜歡'Boarland C++ builder'並且有很好的體驗,但是我似乎無法到達MSVS C#2008的底部,anywhos,我的問題與登錄SQL查詢組成,如果這是它的正確名稱,似乎沒有任何搜索和找到的解決方案工作,這裏我的代碼部分 「SQL到C#登錄查詢

using System.Data.Sql; 

using System.Data.SqlClient; 

namespace DMSTestLoginForm 

{ 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     string connection = @"Data Source=.\SQLExpress;AttachDbFilename=|Data Directory is all set and ready to go|.mdf;Integrated Security=True;User Instance=True"; 
     SqlConnection con = new SqlConnection(connection); 

     try 
     { 
      con.Open(); 
      //MessageBox.Show("Connection Successful"); 
     } 
     catch (Exception) 
     { 
      //MessageBox.Show("Did not connect"); // connection is successful the issue is down bellow. 
     } 
    } 

    private void lgnbtn_Click(object sender, EventArgs e) 
    { 
     string dummyun = uninput.Text; 
     string dummypw = pwinput.Text; 
     SqlCommand dummy1 = new SqlCommand("SELECT * FROM nurse WHERE n_id ='"+uninput.Text+"'"); 
     SqlCommand dummy2 = new SqlCommand("SELECT * FROM nurse WHERE n_pw = '"+pwinput.Text+"'"); 
     string dum = Convert.ToString(dummy1); 
     string dum2 = Convert.ToString(dummy2); 
     if((dum==dummyun)&&(dum2==dummypw)) 
      MessageBox.Show("Welcome in");  //this message is to test if i logged in or not. 
      //Form2 Loggedin = new Form2; 
      //Loggedin.Show(); 
     else 
      MessageBox.Show("Login failed"); 

    } 

的問題不在於我的連接字符串自己居然和我的SQL查詢上述檢查,如果用戶名/密碼,包括在我的DB.table;後者是」護士「,否則,我知道我創造了很多」字符串「的情況下,但我遇到了絕望的情況,並非常感謝解決方案提供商(s),在此先感謝。

+0

您有一個SQL注入漏洞。 – SLaks 2012-02-14 00:57:23

+0

不要以明文存儲密碼 – SLaks 2012-02-14 00:59:04

+0

您的驗證邏輯極其錯誤。 – SLaks 2012-02-14 00:59:28

回答

3

你需要用Datareader執行你的SqlCommand對象。並嘗試使用參數化查詢。 SqlDatareader

private void lgnbtn_Click(object sender, EventArgs e) 
    { 
     string dummyun = uninput.Text; 
     string dummypw = pwinput.Text; 
     con.Open(); 

     using(SqlCommand StrQuer = new SqlCommand("SELECT * FROM nurse WHERE [email protected] AND [email protected]", con)) 
     { 
      StrQuer.Parameters.AddWithValue("@userid",dummyun); 
      StrQuer.Parameters.AddWithValue("@password",dummypw); 
     SqlDataReader dr = StrQuer.ExecuteReader(); 
     If(dr.HasRows) 
     { 
      MessageBox.Show("loginSuccess");  
     } 
     else 
     { 
      //invalid login 
     } 
    } 
    } 
+0

您有複製+粘貼錯誤。第二個\ @ userid應該是\ @密碼。 – 2012-02-14 01:06:38

+0

哇,感謝您的快速響應,我將需要研究你發給我的代碼,但似乎我有我的連接問題,它是在'私人無效Form1_Load(對象發件人,EventArgs e)'中定義的,但似乎我無法訪問它。 – 2012-02-14 01:39:50

+0

嗨Ravi,執行仍然產生錯誤: 「InvalidOperationException未處理」 ExecuteReader:Connectuin屬性尚未初始化。 – 2012-02-14 21:54:10

1

A SqlCommand不是你簡單地打電話Convert.ToString。它有methods that you need to call爲了得到預期的結果。

您需要調用類似ExecuteReader的方法並回讀結果。你應該改變你的查詢爲一個查詢而不是兩個單獨的查詢。最後,正如@SLaks指出的那樣,你不想讓自己容易受到sql注入的攻擊,所以試着將你的查詢寫成參數化查詢,並通過屬性添加你的參數。

+0

感謝您的快速回復:)和豐富信息 – 2012-02-14 01:40:27