SQL / Sync Framework:在执行存储过程时,我在Db上使用SQL事件探查器时看到参数列出两次

时间:2011-08-24 21:10:01

标签: sql microsoft-sync-framework

所以假设我有一个包含2列Shipment_ID(uniqueidentifier)和Completed_Date(datetime,允许空值)的简单表。

我还有一个简单的存储过程,Sync框架将使用它来获取3个参数来匹配这些列和同步行。将Completed_Date列默认为Null,如下所示:

Procedure [Insert_Shipment_From_Sync]
  @Shipment_ID uniqueidentifier,
  @Completed_Date = NULL,
  @sync_row_count as int OUTPUT
Begin
  ...
End

同步适配器设置为具有如下的InsertCommand:

this.InsertCommand = new System.Data.SqlClient.SqlCommand();
this.InsertCommand.CommandText = "[Insert_Shipment_From_Sync]";
this.InsertCommand.CommandType = System.Data.CommandType.StoredProcedure;
this.InsertCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Shipment_ID", System.Data.SqlDbType.UniqueIdentifier));
this.InsertCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Completed_Sync_Date", System.Data.SqlDbType.DateTime));
System.Data.SqlClient.SqlParameter insertcommand_sync_row_countParameter = new System.Data.SqlClient.SqlParameter("@sync_row_count", System.Data.SqlDbType.Int);
insertcommand_sync_row_countParameter.Direction = System.Data.ParameterDirection.Output;
this.InsertCommand.Parameters.Add(insertcommand_sync_row_countParameter);

当我使用SQL事件探查器分析执行同步时,我看到在InsertCommand期间发生以下情况:

declare @p16 int
set @p16=NULL
exec [Insert_Shipment_From_Sync] 
  @Shipment_ID='some guid value',
  @Completed_Date=NULL,
  @sync_row_count=@p16 output,
  @Completed_Date=default
select @p16

这导致我得到:

ErrorMessage:过程或函数Insert_Shipment_From_Sync指定了太多参数。错误:System.Data.SqlClient.SqlException(0x80131904):过程或函数Insert_Shipment_From_Sync指定了太多参数。

为什么Completed_Date被插入参数列表两次?是否将“Completed_Sync”列默认为“允许空值”?是否为过程提供了默认参数(@Completed_Sync = NULL)?

1 个答案:

答案 0 :(得分:0)

通过搜索@Completed_Sync_Date,我发现我实际上已经为InsertCommand和UpdateCommand定义了两次,这最终导致了上面看到的错误。