Предположим, что объект
class A {
public : void Silly(){
this = 0x12341234;
}
Я знаю, что получу ошибку компилятора '«this» не является lvalue'. Но и тогда это не временное явление. Так что же такое гипотетическое объявление «это»?
Компилятор: GCC 4.2 компилятор на mac.
-121--1746106-У меня есть приложение, использующее Рамка с базой данных SQL Server 2008 (Express). Я получаю прерывистую ошибку при обновлении сущности в базе данных, которая указывает, что «предоставленное значение не является допустимым экземпляром типа данных float». Однако, как я могу сказать, значения, которые он устанавливает, всегда будут плавающими. Они отливаются из целых чисел, но даже все равно всегда будут давать поплавки. Если бы коду удалось каким-то образом создать недопустимый float, я бы подумал, что .NET пожалуется на него, прежде чем он даже попадет в SQL Server.
Я включил полное исключение, извлечения кода и схему ниже.
Есть ли что-то, чего я мог бы здесь не упустить - например, можно ли считать одно значение плавающим в .NET, но не в SQL Server? Кроме того, есть ли способ программного регистрации точности и масштаба поплавка, чтобы я мог диагностировать, что происходит, если проблема возникает снова?
Я добавил дополнительный журнал, чтобы попытаться точно зафиксировать то, что происходит здесь, но это прерывистая проблема, и я не могу воспроизвести ее сам.
Ошибка:
System.Data. Дополнительные сведения см. во внутреннем исключении. --- >
System.Data.SqlClient.SqlException: Неверный поток протокола удаленного вызова процедур (RPC) входящего потока табличных данных (TDS). Параметр 4 («@ 1»): предоставленное значение не является допустимым экземпляром типа данных float. Проверьте исходные данные на наличие недопустимых значений. Примером недопустимого значения являются данные числового типа с масштабом, превышающим точность.
в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое подключение) в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое подключение) в System.Data.SqlClient.TdsParser.ThrowExcepureAndWarning () в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkGroupSimpleResultSet bulkGroupHandler, TdsParserStateObject ateObj) в System.Data.SqlClient.SqlCommand.FinishExecureReader (SqlDataReader ds, RunBehavior, String resetOptions String) в System.Data.SqlClient.SqlCommand.RunExecureReireTds (командный командный код поведения, RunBehavior runBehavior, Boolean returnStream, логический асинхронный) в System.Data.SqlClient.SqlCommand.RunExecureReader (cmdBehavior, runBehavior, Boolean returnStream, метод String, результат DbAsyncResult) в Системе. Данные. SqlClient. SqlCommand. InternalExecuteNonQuery (результат DbAsyncResult, Последовательность methodName, Булев sendToPipe) в System.Data.SqlClient.SqlCommand.ExecureNonQuery () в System.Data.Mapping.Update.Internal.DynamicStartCommand.Execute (транслятор, подключение EntityConnection, словарь «» 2 identificalValues «», список «» 1 generityValues «») в System.Data.Mapping.Update.Internal.StartTranslator.Update (Диспетчер stateManager, адаптер IEntityAdapter) --- Конец трассировки стека внутренних исключений --- в System.Data.Mapping.Update.Internal.StartTranslator.Update (Диспетчер stateManager, адаптер IEntityAdapter) в System.Data.EntityClient.EntityAdapter.Update (IEntityStateManager entityCache) в System.Data.Objects.ObjectContext.StartChanges (параметры «» Параметры «») в System.Data.Objects.ObjectContext.StartChanges () в MyApplication.ImageProcessing.ProcessImage (изображение) в C :\Code\ImageProcessing.cs: строка 224
Вот код, который выполняется. (Обратите внимание, что класс Image является классом сущности из Рамка.)
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 использует тип данных Single для столбцов X и Y.