2013-08-21 62 views
0

我需要一些幫助將我的數據(用戶名和密碼)插入到mssql數據庫中。 與LINQ到SQL這是我的解決方案,但在 - >標記線我總是得到一個EntityCommandExecutionException。我有一個帶有兩個文本框的html網站,其中我得到了字符串,並通過javascript發送請求 - ajax到vb.net。檢查數據庫中是否有記錄(LinqToSql,vb.net)

我現在正在研究很長一段時間,我找不到任何解決方案。

正如您所看到的,我想檢查是否存在具有此用戶名的數據行,但在表中沒有任何數據行的情況下不起作用。這意味着查詢應該是'NULL'還是我錯了?

Public Shared Function addData(ByVal username As String, ByVal passwort As String) 

    Dim db = New LoginContext 
    Dim benutzer = New Benutzer 
    Dim available As Boolean = False 
    Dim sha As New SHA1CryptoServiceProvider 

    Dim vName = (_ 
     From b In db.BenutzerSet 
     Where b.Name = username.ToLower() 
     Select b) 

    -> If vName.Count() = 0 Or vName Is Nothing Then 
     benutzer.Name = username.ToLower() 

     Dim bytesToHash() As Byte 

     bytesToHash = System.Text.Encoding.ASCII.GetBytes(passwort) 

     bytesToHash = sha.ComputeHash(bytesToHash) 

     Dim encPassword As String = "" 

     For Each b As Byte In bytesToHash 
      encPassword += b.ToString("x2") 
     Next 

     benutzer.Passwort = encPassword 
     db.BenutzerSet.Add(benutzer) 
     db.SaveChanges() 
     available = True 
    Else 
     available = False 
    End If 
    Return available 
End Function 

感謝您的幫助。

+0

什麼是確切的例外?請添加異常消息和堆棧跟蹤到您的問題。 – Steven

回答

2

使用vName.Any()檢查查詢中是否有任何記錄!

-> If vName.Any() = false Then 

也改變Dim benutzer = New BenutzerDim benutzer As New Benutzer

+0

謝謝,但我怎麼有機會改正我的代碼 如果vName.Count()= 0或VNAME是Nothing然後 如果vName.Count()= 0或vName.Any()是沒有那麼 我需要去轉發如果沒有這樣的用戶這個用戶名或在這種情況下,當表仍然是空的(沒有用戶) – Anthrax

+0

編輯我的答案! –

+0

好的,謝謝! – Anthrax

2

我沒有回答你的問題,但這裏的一些反饋:

  1. 支票vName.Count() = 0 Or vName Is Nothing在錯誤的順序,因爲VB執行它們從左到右。如果vName實際上沒有,則會得到一個NullReferenceException,因爲首先執行vName.Count()
  2. LINQ運營商(如WhereSelect)實際上永遠不會返回Nothing,所以你不必檢查vName Is Nothing;這是多餘的。
  3. 使用vName.Any()vName.Count() == 0具有相同的結果,但更具可讀性,並且在大多數情況下會導致更高效的SQL查詢。
  4. 非常好,你哈希你的密碼。但爲了安全起見,您應該添加鹽and don't use SHA as a hashing algoritm for storing passwords
+0

我有點晚了,但感謝您的回答,我會做一些我尚未實現的更改! – Anthrax

相關問題