2014-09-22 58 views
0

我一直試圖通過我的App.config中的連接字符串連接到我的MS Sql數據庫,但由於某種原因它無法登錄,我似乎無法弄清楚。無法連接到數據庫C#

這是我的連接方法:

public void Con() 
{ 

     string userName = userNameBox.Text; 
     string passWord = passWordBox.Text; 

     bool loginFail; 

     SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["lagerConn"].ConnectionString); 

     //Search Connstring for User ID= & Password= and replace with username and password from Textboxes 
     if (_Connstring.Contains("User ID=")) 
     { 
      _Connstring = _Connstring.Replace("User ID=;", "User ID=" + userName + ";"); 

     } 
     if (_Connstring.Contains("Password=")) 
     { 
      _Connstring = _Connstring.Replace("Password=", "Password='" + passWord + "'"); 
     } 

     try 
     { 
      Conn.Open(); 
      Conn.Close(); 
      loginFail = false; 
     }catch 
     { 
      MessageBox.Show("Login Failed"); 
      loginFail = true; 
     } 
     if(loginFail == false) //If login is successful it will change to the next form and hide the Connect form 
     { 
      mainMenu secondForm = new mainMenu(); 
      secondForm.Show(); 
      this.Hide(); 

     } 

    }` 

這裏是我的App.config

 <add name="lagerConn" connectionString="Data Source=LagerServer;Initial Catalog=LagerDB;Persist Security Info=True;User ID=;Password=" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

I got this exception

+2

您應該始終使用[參數化查詢](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)。這種字符串連接對於[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)攻擊是開放的。並且**不要將您的密碼存儲爲純文本**。使用散列函數作爲SHA-512。 – 2014-09-22 07:14:55

+0

你可以給我們例外,你連接時收到 – Vasistan 2014-09-22 07:15:47

+0

這裏是例外http://gyazo.com/d312025a0af3592ebbd64bf72435f442 – Andrew 2014-09-22 07:19:52

回答

2

根本沒有必要在連接字符串中放置一個空的用戶ID和密碼字段。把它們全部放開,擺脫那個毫無意義的Persist Security Info。使用連接字符串構建器,例如

SqlConnection builder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["lagerConn"].ConnectionString); 

builder.UserID = userID; 
builder.Password = password; 

SqlConnection connection = new SqlConnection(builder.ConnectionString); 

之後,不要只是提供一個通用的錯誤消息,並忽略系統給你的信息。看看例外情況,它會告訴你出了什麼問題。

+0

這幫了我很大的時間,非常感謝,我仍然有很長的路很明顯hehe。 – Andrew 2014-09-22 11:04:16

0

嘗試:

string userName = userNameBox.Text; 
string passWord = passWordBox.Text; 
string connStr = ConfigurationManager.ConnectionStrings["lagerConn"].ConnectionString; 
connStr = connStr.Replace("User ID=;", "User ID=" + userName + ";"); 
connStr = connStr.Replace("Password=", "Password='" + passWord + "'"); 
bool loginFail = false; 
try{ 
    using (SqlConnection Conn = new SqlConnection(connStr){ 
     loginFail true; 
    } 
} 
catch (SqlConnection sqlEx){ 
    //already false 
} 

是的,提防平方l注射攻擊!

0

首先,您不應該在TextBoxes中編寫UserID和Password,將它們寫入靜態連接字符串中。例外情況告訴你所有事情 - >用戶登錄失敗。您沒有在文本框中輸入正確的用戶名或密碼。