【问题标题】:Select from local SQL Server Compact Edition database using linq使用 linq 从本地 SQL Server Compact Edition 数据库中选择
【发布时间】:2014-07-09 11:52:45
【问题描述】:

我收到关于我的选择查询的以下错误:

这里是有问题的选择查询:

public int countLogin(string username, string password)
{
    try
    {
        int query = (from a in de.userlogin
                     where a.username == username && a.password == password
                     select a).Count();
        return query;   
    }
    catch (Exception e)
    {
        MessageBox.Show(e.ToString());
        return 0;
    }
}

错误表示ntext 不能与order bywhere 子句一起使用。因此,我没有在我的数据库方案中使用ntext 数据类型

那么我哪里做错了?因为没有varchar 数据类型

我认为这是一些错误,根据以下url

【问题讨论】:

  • 这根本不是您问题的答案,但是您是否将密码存储为纯文本?我真的希望不会。请,请不要那样做。密码在存储之前应该被加盐和散列。如果您不知道这意味着什么,请回复此评论,我会为您指明正确的方向。
  • 目前,我想将密码存储为纯文本,现在,我想从数据库中选择数据,发现上面提到的错误
  • 您是否在使用任何实体框架/模型/等?如果是这样,请记住在更改数据库后刷新它们,以便您的程序实际获取更改。
  • @RussellUhl 是的,我正在使用 ado.net 模型
  • 您是否将 EF6 与最新的 SQL Server Compact EF 提供程序一起使用?我认为不会,因为这个问题应该解决。

标签: c# sql select sql-server-ce


【解决方案1】:

ntext 用于 nvarchar(count 或 MAX)。

尝试使用 varchar(100) 代替 nvarchar(100)。

问候

【讨论】:

  • 我用的是sql express 2008,字符串数据类型只有ntext、nvarchar、nchar,你推荐哪一个来存储密码?
  • 请告诉我们你的“de”对象的类定义。
  • 我没有使用任何类定义,我只是创建了ado.net 对象
  • @Trickzter AES 是双向加密,不适合存储密码。使用 SHA-3 或类似方法的单向方法是一种更好的方法。对密码进行加盐和哈希处理,然后存储它。在对用户进行身份验证时,对提供的密码进行加盐和哈希处理,然后将其与数据库中存储的密码进行比较。
  • "SQL Server CE 并不支持 SQL Server 中的所有数据类型。例如,不支持非 Unicode 文本列(varchar、char、text)和 smallmoney;虽然 nvarchar、nchar、ntext ,而且有钱支持。”来源:technet.microsoft.com/en-us/library/aa275635(v=sql.80).aspx
猜你喜欢
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多