远程过程调用(RPC)协议流不正确

时间:2013-06-06 13:38:14

标签: c# .net wpf entity-framework tsql

我使用entityframework 5.0。我有这么多考试。如果我单独进行测试就会通过,如果我在同一时间与其他人一起运行它,它就不会通过。测试之间没有联系。每次发送一个相同的查询。它不会被修改。

**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 */,
        'alma22@mailmetrash.com' /* @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

4 个答案:

答案 0 :(得分:8)

当我尝试使用float column数据类型插入新行时,我遇到了这个问题。当我尝试插入(无穷大)或(NaN)值时抛出此异常,并且SOL Server不支持这些值。

如果您使用Entity Framework,建议使用(http://hibernatingrhinos.com/products/EFProf/learn/)。跟踪生成的SQL。并检测导致您的问题的参数。

如果您使用TPT (Table-Per-Type),SQL事件探查器将无法帮助您。

enter image description here enter image description here

答案 1 :(得分:2)

好吧,我认为这个问题来自你的参数@ 6。似乎格式无效。您是否尝试过这样的事情来创建日期: new DateTime(1991,07,04).ToShortDateString()?

答案 2 :(得分:0)

在我的存储过程中添加此行为我解决了问题

  

设置NOCOUNT OFF;

答案 3 :(得分:0)

我正在使用选择命令发布SQLCommand,但出现错误:

*"The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. The RPC name is invalid."*

因为我正在调用一个Commande类型等于“ CommandType.StoredProcedure”的SQLCommand

将其更改为“ CommandType.Text”解决了我的问题。

System.Data.SqlClient.SqlCommand result = new SqlCommand(GetSQLSelectCommande());
        if (FromDate == default(DateTime) || isEqualDay(FromDate, DateTime.Now))
        {
            FromDate.AddMonths(-1);
        }
        ToDate = new DateTime(ToDate.Year, ToDate.Month, ToDate.Day, 23, 59, 59);
        result.Parameters.Clear();
        result.CommandType = CommandType.Text;
        result.Parameters.Add("@IdClient", SqlDbType.Int).Value = this.IdClient;
        result.Parameters.Add("@dateDebut", SqlDbType.DateTime).Value = this.FromDate;
        result.Parameters.Add("@dateFin", SqlDbType.DateTime).Value = this.ToDate;
        result.Parameters.Add("@langue", SqlDbType.Int).Value = (Offix.Culture.GetCulture() == Offix.EnumLangue.ofxFrancais ? 5 : 3);