2013-06-06 3 views
5

entityframework 5.0을 사용합니다. 나는 많은 시험을했다. 만약 내가 혼자서 시험을 통과한다면, 다른 사람들과 동시에이 시험을 통과한다면, 그것은 통과하지 못한다. 테스트 간에는 아무런 연락이 없습니다. 매번 동일한 쿼리 하나가 전송되었습니다. 그것은 수정되지 않을 것입니다.RPC (원격 프로 시저 호출) 프로토콜 스트림이 잘못되었습니다.

**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 

답변

2

좋아요, 문제는 당신이 매개 변수 @ 6에서오고 있다고 생각합니다. 형식이 잘못되었습니다. 날짜를 만들려면 다음과 같이 시도해보십시오. new DateTime (1991,07,04) .ToShortDateString()?

+0

나는 또한 그것을 읽었다. 그러나 "매개 변수"가 잘못된 경우 테스트를 단독으로 실행하면 왜 작동합니까? 쿼리가 동일하다. – user1693057

5

플로트 열 데이터 형식으로 새 행을 삽입하려고하면이 문제가 발생합니다. 이 예외는 (Infinity) 또는 (NaN) 값을 삽입하려고 할 때 throw되며 이러한 값은 SOL 서버에서 지원되지 않습니다.

Entity Framework를 사용하는 경우 해당 (http://hibernatingrhinos.com/products/EFProf/learn/)을 사용하는 것이 좋습니다. 생성 된 SQL을 추적한다. 그리고 문제를 일으키는 매개 변수를 감지하십시오.

TPT (Table-Per-Type)을 사용하는 경우 SQL 프로필러가 도움이되지 않습니다. 내 저장 프로 시저에이 라인을 추가 enter image description here

0

enter image description here

SET의 NOCOUNT를 OFF에 대한 문제를 해결;

관련 문제