【问题标题】:Argument data type text is invalid for argument 1 of lower function较低函数的参数 1 的参数数据类型文本无效
【发布时间】:2014-05-06 06:16:04
【问题描述】:

在我的应用程序的搜索功能中,我实现了一个搜索功能,它针对数据库执行以下语句。

resultsquery = db.DBMovies.Where(m => (m.Actors.ToLower()).Contains(q.ToLower()))

q.ToLower()部分我读取了url参数q并转换成小写在相关的数据库栏目中找到。在我的数据库中,“演员”列的类型是“文本”而不​​是 varchar。当我运行我的应用程序时,我得到一个名为Argument data type text is invalid for argument 1 of lower function 的异常。有什么办法可以避免这个异常?我更喜欢一种可以在一行中解决它的方法。

谢谢。

【问题讨论】:

  • text 是 sql 数据类型,用于非常大的文本,最多可容纳 2GB;我真诚地怀疑您是否需要“电影”表的演员列;如果你不合理,你真的应该使用 nvarchar(一些合理的限制) 或 nvarchar(max) - 查看technet.microsoft.com/en-us/library/ms187993.aspx
  • text 和 ntext 字段用于非常大的文本数据。您应该使用 varchar 字段。与文本字段相比,您可以更轻松地对 varchar 字段执行类似的查询。欲了解更多信息,请参阅:databases.aspfaq.com/database/…
  • 检查这是否可以帮助你stackoverflow.com/questions/2431908/…
  • @OndrejSvejdar 你是对的!但是有没有办法在不改变数据库的情况下解决这个问题?

标签: c# sql sql-server lambda


【解决方案1】:

只需将数据库中列的数据类型更改为NVARCHAR(MAX),您的代码就会像魅力一样工作。如果您进行一些谷歌搜索,这是一个已知问题。例如,请查看here

【讨论】:

  • 这对我也有用。如果 OP 将此标记为最佳答案,它将对其他人有所帮助。
  • 如果无法更改数据类型,请使用convert(varchar(max), myValue)
【解决方案2】:

您可以简单地将列转换为 VARCHAR - 像这样:

ALTER TABLE DBMovies
ALTER COLUMN Actors VARCHAR(MAX)

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 2016-07-29
    • 1970-01-01
    • 2017-03-22
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    相关资源
    最近更新 更多