0

在将我的数据(用户名和密码)插入 mssql 数据库时,我需要一些帮助。使用 linq to sql 这是我的解决方案,但在 -> 标记行我总是得到一个 EntityCommandExecutionException。我有一个带有两个文本框的 html 网站,我从中获取字符串并通过 javascript - ajax 将请求发送到 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

谢谢你的帮助。

4

2 回答 2

2

用于vName.Any()检查您的查询中是否有任何记录!

->  If vName.Any() = false Then

Dim benutzer = New Benutzer改为Dim benutzer As New Benutzer

于 2013-08-21T13:11:51.080 回答
2

我没有你的问题的答案,但这里有一些反馈:

  1. 检查vName.Count() = 0 Or vName Is Nothing顺序错误,因为 VB 从左到右执行它们。如果vName实际上是 Nothing,您将得到一个NullReferenceException, 因为vName.Count()首先执行。
  2. LINQ 运算符(例如Whereand Select)实际上永远不会返回Nothing,因此您不必检查vName Is Nothing; 这是多余的。
  3. UsingvName.Any()与 具有相同的结果vName.Count() == 0,但更具可读性,并且大多数时候会产生更有效的 SQL 查询。
  4. 很好,你正在散列你的密码。但为了安全起见,您应该添加盐并且不要使用 SHA 作为存储密码的散列算法
于 2013-08-21T13:21:18.853 回答