我有一个数据库字段Field260,它将日期表示存储为文本。例如,3/29/2018的值将存储为字符串"03/29/2018"
Dim Db = New DataClasses1DataContext
Return From cf In Db.FileDatas
Where cf.Field260 <= System.DateTime.Today
返回错误
System.Data.SqlClient.SqlException: 'Explicit conversion from data type text to datetime is not allowed.'
当我尝试解析日期时
Where DateTime.Parse(cf.Field260) <= System.DateTime.Today
我收到了
System.NotSupportedException: 'Method 'System.DateTime Parse(System.String)' has no supported translation to SQL.'
我很难过。
答案 0 :(得分:0)
我遇到了类似的问题-曾经有一个用于字段的DatePicker的应用程序,以及我的数据库字段定义为DateTime的应用程序,但是用户绝对希望将所需的任何垃圾复制/粘贴到该字段中。问题是,我允许他们通过“日期”字段搜索记录。
作为一种解决方法,我对它们输入的垃圾进行一些基本验证,以尝试仅允许日期(IsDate函数捕获大多数错误,但仍允许它们输入年份,例如208而不是2018,因此我还要检查Year( DateValue(txtDate.Text))> 2000,它对我有用,因为它是应用程序接收的日期,因此,绝对不能早于今年。然后,将其作为varchar存储在数据库中。
搜索记录时,您有两个选择-抓住所有记录,然后在返回的列表上执行日期转换以减少结果,或者希望并祈祷您的有问题的LINQ WHERE子句将提供您想要的一切。
答案 1 :(得分:-1)
想出来,因为我是天才。
Return From cf In Db.FileDatas
Where cf.Field260.ToString() <= System.DateTime.Today.ToString("MM/dd/yyyy")
以某种方式比较字符串到字符串的作品,谁知道!