gpt4 book ai didi

sql-server-2008 - Entity Framework SQL 异常 : The supplied value is not a valid instance of data type float

转载 作者:行者123 更新时间:2023-12-03 14:31:38 24 4
gpt4 key购买 nike

我有一个使用 Entity Framework 和 SQL Server 2008 (Express) 数据库的应用程序。我在更新数据库中的实体时遇到间歇性错误,这表明“提供的值不是数据类型浮点数的有效实例”。但是,据我所知,它设置的值将始终是浮点数。它们是从整数转换的,但即使仍然会始终产生浮点数。如果代码确实设法以某种方式创建了一个无效的浮点数,我会认为 .NET 会在它到达 SQL Server 之前提示它。

我在下面包含了完整的异常、代码提取和架构。

有什么我可能在这里遗漏的 - 例如,单个值可以被视为 .NET 中的浮点数而不是 SQL Server 中的浮点数吗?或者,有什么方法可以以编程方式记录浮点数的精度和小数位数,以便在问题再次出现时诊断发生了什么?

我添加了一些额外的日志记录来尝试准确捕获这里发生的事情,但这是一个间歇性问题,我自己无法重现。

错误是:

System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. --->

System.Data.SqlClient.SqlException: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 4 ("@1"): The supplied value is not a valid instance of data type float. Check the source data for invalid values. An example of an invalid value is data of numeric type with scale greater than precision.

 at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
--- End of inner exception stack trace ---
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
at System.Data.Objects.ObjectContext.SaveChanges()
at MyApplication.ImageProcessing.ProcessImage(Image image) in C:\Code\ImageProcessing.cs:line 224


这是正在执行的代码。 (注意 Image 类是来自 Entity Framework 的实体类。)
private static System.Random _randomLocation = new System.Random();

private void ProcessImage(Image image)
{
float x = _randomLocation.Next(668); // note: the System.Random.Next method always returns an int
float y = 0 - image.Height; // note: image.Height is an int and is always around 300-600 in value in this application

image.X = x;
image.Y = y;
_dataContext.SaveChanges();
}

这所指的表的模式摘录是:
CREATE TABLE Image
(
ImageID uniqueidentifier NOT NULL PRIMARY KEY,
X float NOT NULL,
Y float NOT NULL
)

另外我应该注意到 EF 模型对 X 和 Y 列使用数据类型 Single 。

最佳答案

我得到了完全相同的错误。事实证明,我正在将浮点数除以零。在我做除法时,这并没有在代码中抛出异常;当我尝试将此值保存在数据库中时,出现错误。

希望这对你们中的一些阅读问题的人有用 - 感谢约翰提出它。

关于sql-server-2008 - Entity Framework SQL 异常 : The supplied value is not a valid instance of data type float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7341641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com