如何向c#tableadapter更新方法添加额外的过程参数?

如何向c#tableadapter更新方法添加额外的过程参数?,c#,stored-procedures,parameters,binding,tableadapter,C#,Stored Procedures,Parameters,Binding,Tableadapter,我在C#中有一个Winforms应用程序,它使用数据集的tableadapter fill和update方法调用SQL Server数据库中的存储过程。这很好用。更新存储过程的所有参数都映射到datatable中的现有列 现在我想向update存储过程和方法添加一个额外的参数。但此列不是来自datatable,而是来自表单上的另一个控件。它是一个简单的日期,只从日历中选择一次,而不是在网格中逐行设置 因此,我向存储过程添加了一个新参数,但没有将其映射到数据集中的列。当我这样做并重新配置table

我在C#中有一个Winforms应用程序,它使用数据集的tableadapter fill和update方法调用SQL Server数据库中的存储过程。这很好用。更新存储过程的所有参数都映射到datatable中的现有列

现在我想向update存储过程和方法添加一个额外的参数。但此列不是来自datatable,而是来自表单上的另一个控件。它是一个简单的日期,只从日历中选择一次,而不是在网格中逐行设置

因此,我向存储过程添加了一个新参数,但没有将其映射到数据集中的列。当我这样做并重新配置tableadapter时,我得到了错误:

缺少某些参数绑定。数据集中的值不会用于这些参数

我希望并且期望tableadapter更新方法能够在这个附加参数中接受方法参数,但是它没有

我应该如何处理这个问题?是否有方法重写update方法以提供此值?或者我应该向数据集中添加一个“合成”列,在更新时为每一行(使用一个值)设置该列


如有任何建议,将不胜感激。谢谢

以下VB代码适用于我:

Me.MyTabTableAdapter.Adapter.InsertCommand.Parameters.AddWithValue("@IntParam", 5)
Me.MyTabTableAdapter.Adapter.InsertCommand.Parameters.Add("@TabParam", SqlDbType.Structured).Value = tempDataTable   
Me.MyTabTableAdapter.Update(MyDataSet.MyTab)
MyTabTableAdapter
是与
MyDataSet.MyTab
表格相对应的表格适配器

Param
@TabParam
是用户表类型的参数。我能够在代码中动态创建一个
数据表
,并将其传递给服务器端。
tempDataTable
的列顺序必须与用户表类型中定义的列顺序完全匹配

注意:我的第一次尝试是按照您的建议对数据集使用“合成”列。它没有起作用。无法将此类列绑定到存储过程param

更新 上面的代码可以工作,但是。。。。就一次。 我没有考虑到每次保存尝试都会添加另一个同名参数,从而导致崩溃。 目前,我认为最好的方法是在MyDataSet.xsd设计模式下使用鼠标将适当的参数添加到MyTabTableAdapter,然后简单地设置:

Me.MyTabTableAdapter.Adapter.InsertCommand.Parameters("@TabParam").Value = tempDataTable   

这是VB代码,所以()表示索引:)。

以下VB代码适合我:

Me.MyTabTableAdapter.Adapter.InsertCommand.Parameters.AddWithValue("@IntParam", 5)
Me.MyTabTableAdapter.Adapter.InsertCommand.Parameters.Add("@TabParam", SqlDbType.Structured).Value = tempDataTable   
Me.MyTabTableAdapter.Update(MyDataSet.MyTab)
MyTabTableAdapter
是与
MyDataSet.MyTab
表格相对应的表格适配器

Param
@TabParam
是用户表类型的参数。我能够在代码中动态创建一个
数据表
,并将其传递给服务器端。
tempDataTable
的列顺序必须与用户表类型中定义的列顺序完全匹配

注意:我的第一次尝试是按照您的建议对数据集使用“合成”列。它没有起作用。无法将此类列绑定到存储过程param

更新 上面的代码可以工作,但是。。。。就一次。 我没有考虑到每次保存尝试都会添加另一个同名参数,从而导致崩溃。 目前,我认为最好的方法是在MyDataSet.xsd设计模式下使用鼠标将适当的参数添加到MyTabTableAdapter,然后简单地设置:

Me.MyTabTableAdapter.Adapter.InsertCommand.Parameters("@TabParam").Value = tempDataTable   
这是VB代码so()表示索引:)