2013-06-06 8 views
5

Używam elementu entityframework 5.0. Mam tyle testów. Jeśli przeprowadzę sam test, to przejdzie, jeśli uruchomię to z innymi sobą w tym samym czasie, to nie przejdzie. Nie ma kontaktu między testami. Za każdym razem wysyłano jedno samo zapytanie. Nie został zmodyfikowany.Strumień protokołu zdalnego wywołania procedury (RPC) jest niepoprawny

**query:** 

insert [dbo].[Patient] 
     ([AddressId], 
     [FirstName], 
     [LastName], 
     [MiddleName], 
     [MuthersName], 
     [Sex], 
     [BirthDate], 
     [TAJNumber], 
     [Height], 
     [Weight], 
     [PhoneMobil], 
     [PhoneHome], 
     [Email], 
     [OtherDisease]) 
values (13 /* @0 */, 
     'Peter' /* @1 */, 
     'Peter' /* @2 */, 
     'Peter' /* @3 */, 
     'Maria' /* @4 */, 
     1 /* @5 */, 
     '1991-07-04T00:00:00' /* @6 */, 
     '5464845' /* @7 */, 
     170 /* @8 */, 
     66 /* @9 */, 
     '00456249864' /* @10 */, 
     '00456249864' /* @11 */, 
     '[email protected]' /* @12 */, 
     null) 



select [Id] 
from [dbo].[Patient] 
where @@ROWCOUNT > 0 
     and [Id] = scope_identity() 



**WARN:** 
System.Data.SqlClient.SqlException (0x80131904): The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 9 ("@6"): The supplied value is not a valid instance of data type datetime2. 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, Action`1 wrapCloseInAction) 
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 
    at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
    at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() 
    at System.Data.SqlClient.SqlDataReader.get_MetaData() 
    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, Int32 timeout, Task& task, Boolean asyncWrite) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 
    at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
    at HibernatingRhinos.Profiler.Appender.ProfiledDataAccess.ProfiledCommand.ExecuteDbDataReader(CommandBehavior behavior) 
ClientConnectionId:c184fe10-8d28-4b0b-96bf-395796cd0e29 




**exception:** 
Test Name: VM_PatientRegistration_Insert 
    Test FullName: **Insert 
    Test Source: **line 23 
    Test Outcome: Failed 
Test Duration: 0:00:01,0018114 

Result Message: 
Test method TandoCare.Desktop.Test.ViewModel.PatientRegistrationViewModelTest.VM_PatientRegistration_Insert threw exception: 
System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> 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 9 ("@6"): The supplied value is not a valid instance of data type datetime2. Check the source data for invalid values. An example of an invalid value is data of numeric type with scale greater than precision. 
Result StackTrace: 
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 
    at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
    at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() 
    at System.Data.SqlClient.SqlDataReader.get_MetaData() 
    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, Int32 timeout, Task& task, Boolean asyncWrite) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 
    at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
    at HibernatingRhinos.Profiler.Appender.ProfiledDataAccess.ProfiledCommand.ExecuteDbDataReader(CommandBehavior behavior) 
    at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
    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.Entity.Internal.InternalContext.SaveChanges() 
--- End of inner exception stack trace --- 
    at System.Data.Entity.Internal.InternalContext.SaveChanges() 
    at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() 
    at System.Data.Entity.DbContext.SaveChanges() 
    at TandoCare.Infrastructure.Data.UnitOfWork.UnitOfWorkBase`1.Save() in ** at TandoCare.Desktop.Test.ViewModel.PatientRegistrationViewModelTest.VM_PatientRegistration_Insert() in *** :line 55 

Odpowiedz

2

OK, myślę, że problem pochodzi od Ciebie parametr @ 6. Wygląda na to, że format jest nieprawidłowy. Czy możesz spróbować czegoś takiego, aby utworzyć datę: new DateTime (1991,07,04) .ToShortDateString()?

+0

Ja też to przeczytałem. Ale jeśli "parametr" jest nieprawidłowy, dlaczego działa, gdy sam wykonuję test? zapytanie jest takie samo – user1693057

5

Napotkałem ten problem, gdy próbowałem wstawić nowy wiersz z typem danych kolumny pływaka. i ten wyjątek jest zgłaszany podczas próby wstawienia wartości (Infinity) lub (NaN), a te wartości nie są obsługiwane przez SOL Server.

jeśli korzystasz z Entity Framework, zalecanego do użycia (http://hibernatingrhinos.com/products/EFProf/learn/). śledzić wygenerowany SQL. i wykryj parametr powodujący twój problem.

Program SQL Profiler nie pomoże, jeśli używasz TPT (Table-Per-Type).

enter image description here enter image description here

0

Dodanie tej linii w moim procedury przechowywanej rozwiązał problem dla mnie

SET NOCOUNT OFF;

Powiązane problemy