由于 GUID,C# 模型不支持 SQL 查询



在数据库中,我的user_details表有"UserId (varchar 255)"。我的模型如下:

    public Guid UserId { get; set; }
    public string Email { get; set; }
    public string Gender { get; set; }

问题是当我通过UserId查询它时,我收到有关字符串到guid转换的无效转换异常。下面是查询:

SELECT * FROM UserDetails WHERE UserId = '" + new Guid(userId.ToString()) +     "'"

正如斯科特所提到的(考虑到没有提到正在为您进行参数化的ORM),请使用参数,以获得更好的安全性和更好的性能。

var sql = "SELECT * FROM UserDetails WHERE UserId = @UserId";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(sql, connection);
    command.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier);
    command.Parameters["@UserId"].Value = userId.ToString();
    // Execute query and return data
}

为了完整起见,如果您只是想内联转换您的 userId(类似于您当前正在做的事情),您可以使用以下内容:

"SELECT * FROM UserDetails WHERE UserId = '" + userId.ToString() +  "'"

但是,我强烈建议不要这样做。 在这种情况下,您有一个 Guid 类型,因此您应该不会受到 SQL 注入的影响,但编写这样的代码将帮助您养成坏习惯并可能在未来产生问题。 我的第一个示例是推荐的方法。

我发现数据库表声明异常的问题。正如我在问题中提到的,我的数据库表 UserId 字段是 varchar,这导致了问题当我将其更改为唯一标识符时,它表示有效。

我认为在您的

表中,您应该将 [UserId] 声明为 [Uniqueindetifier],这与 GUID [全局唯一标识符] 相同,并且在选择查询中只需将唯一标识符作为字符串在引号内发送,如下所示:

"SELECT * FROM UserDetails WHERE UserId = '" + UserId.ToString() + "'"

不要在查询中引入新的 Guid 对象,因为查询只是一个简单的字符串,不能在查询中 parce 对象:

更改此设置:

"SELECT * FROM UserDetails WHERE UserId = '" + new Guid(userId.ToString()) + "'"

为此:

"SELECT * FROM UserDetails WHERE UserId = '" + userId.ToString() +  "'"

你必须像这样使用:

SELECT * FROM UserDetails WHERE UserId = '" + Giud.UserId + "'"

,然后为用户 ID 选择一种类型。例如 int

更新

public Guid {
  public static string UserId {get;set;}
  public static string Email {get;set;}
  public static string Gender {get;set;}
}

然后,例如,如果您有一个文本框,您将插入的文本将存储在 Guid.UserId 中。比你像我上面说的那样进行查询。

相关内容

  • 没有找到相关文章

最新更新