2011-09-20 31 views
0

我添加了一個Datasoruce以我目前的項目及以下已添加到我的App.config文件:如何查詢VB.NET數據源

<connectionStrings> 
     <add name="WindowsApplication1.My.MySettings.dbConnectionString" 
      connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\db.accdb" 
      providerName="System.Data.OleDb" /> 
    </connectionStrings> 

如何我現在可以查詢和更新這個數據源?

我有以下查詢:

Dim sqlstr As String = "INSERT INTO Accounts(Username,Password)VALUES('" & Trim(Account(0)) & "','" & Trim(Account(1)) & "')" 

,但我也不太清楚如何實際運行查詢

回答

4

(使用PHP和一個數據庫連接文件新建VB,!)我現在如何查詢和更新這個數據源?

如何你這樣做是正確的吧!

你有兩個巨大的問題與代碼:

  1. 切勿使用字符串連接將值插入這樣的SQL語句。
  2. 切勿將密碼作爲純文本存儲在數據庫中。

有零的情況下,其中任何一個都是可以接受的。

下面是它可能看上去不是一個辦法:

Dim sql As String = "INSERT INTO Account (UserName, PasswordHash) VALUES (? , ?)" 
Using cn As New OleDbConnection(ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString), _ 
     cmd As New OleDbCommand(sql, cn) 

    cmd.Parameters.Add("UserName", OleDbType.VarChar, 50).Value = Account(0).ToString().Trim() 
    cmd.Parameters.Add("PasswordHash", OleDbType.Char, 20).Value = HashPassword(Account(1).ToString().Trim()) 

    cn.Open() 
    cmd.ExecuteNonQuery() 
End Using 

請注意,我改變了你的一列的名字,我referrenced尚不存在的HashPassword()函數。您需要構建自己的HashPassword()函數以使用該代碼。在構建函數時,查找要使用的scrypt或bcrypt函數。不要使用MD5。 .Net建立的最好的是SHA1。如果你真的必須去那條路線(SHA1)你可以,但scrypt或bcrypt是大大優先選擇的(這就是爲什麼我沒有提供給你的功能:它將依賴於其他代碼,你必須首先從網上獲得) 。

當你去認證一個用戶時,你必須使用相同的函數來散列所嘗試的密碼,並比較散列值而不是原始密碼。這是做這件事唯一安全的方法。

+0

非常感謝您的幫助。該軟件本身連接到我的服務器以驗證用戶身份,這是我在學習VB時製作的一個簡單的應用程序。在將數據發送到服務器之前,它將對MD5進行加密以與我的在線數據庫中的密碼進行比較(也是MD5加密的)。 知道了一段時間後的所有工作,出現類型不匹配的問題,並在數據庫的附加條目中將OleDbType.Char更改爲OleDbType.Integer。 另外,50 /,20與插入語句有什麼關係?這是插入字符的限制嗎? 非常感謝:) – Chris

+0

50和20是猜測列的大小,應該改變以匹配實際的列。您應該**不**使用md5來散列您的密碼。它很容易破解。另外,hash!=加密。 –