如何向c#tableadapter更新方法添加其他过程参数?

时间:2017-07-12 18:44:52

标签: c# stored-procedures parameters binding tableadapter

我在C#中有一个Winforms应用程序,它使用数据集的tableadapter填充和更新方法来调用SQL Server数据库中的存储过程。这工作正常。更新存储过程的所有参数都映射到数据表中的现有列。

现在我想为更新存储过程和方法添加一个附加参数。但是此列不是来自数据表,而是源自表单上的另一个控件。这是一个简单的日期,只需从日历中选取一次,并且不会在网格中逐行设置。

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

  

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

我希望并期望tableadapter更新方法能够在此附加参数中接受作为方法参数,但它不会。

我该如何处理?有没有办法覆盖update方法来提供这个值?或者我应该在数据集中添加“合成”列,在更新时为每行设置(使用一个值)?

任何建议都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

以下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是用户表类型的参数。我能够在代码中快速创建一个DataTable并将其传递给服务器端。 tempDataTable的列顺序必须与用户表类型中定义的列顺序完全匹配。

请注意,我的第一个尝试是对数据集使用“合成”列。它没有用。将该列绑定到存储过程参数是不可能的。

更新 上面的代码有效,但是……。 我没有考虑到每次保存尝试都会添加另一个具有相同名称的参数,这会导致崩溃。 目前,我认为最好的方法是在MyDataSet.xsd设计模式下用鼠标将适当的参数添加到MyTabTableAdapter并进行简单设置:

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

这是VB代码,因此()表示索引:)。