【问题标题】:check whether there is already a record in the database (LinqToSql, vb.net)检查数据库中是否已经有记录(LinqToSql,vb.net)
【发布时间】:2013-08-21 13:01:48
【问题描述】:

在将数据(用户名和密码)插入 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

感谢您的帮助。

【问题讨论】:

  • 确切的例外是什么?请将异常消息和堆栈跟踪添加到您的问题中。

标签: vb.net linq-to-sql


【解决方案1】:

使用vName.Any()检查您的Query中是否有记录!

->  If vName.Any() = false Then

还将Dim benutzer = New Benutzer 更改为Dim benutzer As New Benutzer

【讨论】:

  • 谢谢,但是如果 vName.Count() = 0 或 vName 什么都没有,那么我该如何纠正我的代码 如果 vName.Count() = 0 或 vName.Any() 什么都没有,那么我需要如果没有具有此用户名的用户或在这种情况下表仍然为空(没有用户),则继续前进
【解决方案2】:

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

  1. 检查vName.Count() = 0 Or vName Is Nothing 的顺序错误,因为VB 从左到右执行它们。如果 vName 实际上是 Nothing,你会得到一个 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

【讨论】:

  • 我来晚了,但感谢您的回答,我会做一些我尚未实施的更改!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多