C# 参数数据类型文本对于lower函数的参数1无效
在我的应用程序的搜索函数中,我实现了一个搜索函数,它对数据库执行以下语句C# 参数数据类型文本对于lower函数的参数1无效,c#,sql,sql-server,lambda,C#,Sql,Sql Server,Lambda,在我的应用程序的搜索函数中,我实现了一个搜索函数,它对数据库执行以下语句 resultsquery = db.DBMovies.Where(m => (m.Actors.ToLower()).Contains(q.ToLower())) 在部分q.ToLower()中,我读取了url参数q,并将其转换为小写,然后在相关的数据库列中找到它。在我的数据库中,“Actors”列的类型是“text”,而不是varchar。当我运行我的应用程序时,我得到一个名为的异常,参数数据类型text对于低级
resultsquery = db.DBMovies.Where(m => (m.Actors.ToLower()).Contains(q.ToLower()))
在部分q.ToLower()
中,我读取了url参数q
,并将其转换为小写,然后在相关的数据库列中找到它。在我的数据库中,“Actors”列的类型是“text”,而不是varchar。当我运行我的应用程序时,我得到一个名为的异常,参数数据类型text对于低级函数的参数1无效。有什么办法可以避免这个例外吗?我更喜欢一种方法,我可以解决它在一行
谢谢。只需将数据库中列的数据类型更改为NVARCHAR(MAX)
,您的代码就可以正常工作了。这是一个已知的问题,如果你用谷歌搜索的话。例如,请看一看。您可以简单地将列转换为VARCHAR,如下所示:
ALTER TABLE DBMovies
ALTER COLUMN Actors VARCHAR(MAX)
文本是非常大的文本的sql数据类型,最多可容纳2GB;我真诚地怀疑你们会需要那个作为“电影”表的演员栏;如果不合理,您确实应该使用nvarchar(一些合理的限制)或nvarchar(最大值)-签出文本和ntext字段用于非常大的文本数据。您应该使用varchar字段。对varchar字段执行这样的查询比对文本字段更容易。有关更多信息,请参阅:检查这是否可以帮助您@OndrejSvejdar您是对的!但有没有一种方法可以在不改变数据库的情况下解决这个问题呢?谢谢你的回答。这对我也很有用。如果OP将此标记为最佳答案,将对其他人有所帮助。如果您无法更改数据类型,请使用convert(varchar(max),myValue)
。谢谢您的回答!