我的数据库表中有这个列,它是一个字符串。我没有制作这个表,我无法更改数据类型。
但是我需要将它转换为我的where子句中的float,以便我可以将它与浮点数进行比较。
我已尝试将我的列投射为浮动:
sql += " AND CAST (ec.bedrooms as float) <= " + id.beds.Max().Split('-')[1] + " AND CAST (ec.bedrooms as float) >= " + id.beds.Min().Split('-')[0];
但是因为我收到了这个错误,所以没有用:
An error occurred while reading from the store provider's data reader. See the inner exception for details
我做错了什么?
以下是为该部分生成的内容
AND CAST (ec.bedrooms as float) <= 3 AND CAST (ec.bedrooms as float) >= 2
"InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Error converting data type nvarchar to float.","ExceptionType":"System.Data.SqlClient.SqlException","StackTrace":" at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)\r\n at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)\r\n at System.Data.SqlClient.SqlDataReader.Read()\r\n at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.StoreRead()"}}
答案 0 :(得分:0)
看起来你的ec.bedrooms有非数字值...你可以检查如下:
sql += " AND CAST (iif(isnumeric(ec.bedrooms)>0,ec.bedrooms,null) as float) <= " + id.beds.Max().Split('-')[1] + " AND
CAST (iif(isnumeric(ec.bedrooms)>0,ec.bedrooms,null) as float) >= " + id.beds.Min().Split('-')[0];