【问题标题】:Insert command behavior on adding a new datarow to the dataset向数据集添加新数据行时的插入命令行为
【发布时间】:2019-01-15 08:34:24
【问题描述】:

在下面的代码中,我向数据集 RecSet 添加了一个新行。但是在运行程序时,当我检查 ProductsAdapt 的 Insert 命令 的参数时,所有参数的 value=nothing。添加新行时,插入命令的参数不会更新?

Private ProductsAdapt As New OleDb.OleDbDataAdapter()
Private RecSet As DataSet

RecSet.Clear()

Dim oDR As DataRow = RecSet.Tables("Products").NewRow()

oDR("ProductID") = ProductID
oDR("DefinedDate") = DefinedDate
oDR("OperID") = OperID

RecSet.Tables("Products").Rows.Add(oDR)
intResult = ProductsAdapt.Update(RecSet, "Products")

【问题讨论】:

    标签: sql sql-server database vb.net oledb


    【解决方案1】:

    这是预期的行为。考虑到您的DataTable 中可能会保存多行。那么您希望InsertCommand 的参数具有什么值?

    发生的情况是,在 Update 方法中,适配器基本上循环通过 DataRowsDataTable 并且,对于每个具有 AddedRowState 的适配器,它将设置 @来自DataRow 的相应字段的每个参数的 987654330@ 并调用ExecuteNonQuery。这就是为什么您必须为每个参数指定源列的名称:以便适配器知道从哪里获取每一行的数据。

    【讨论】:

    • 感谢您的回答。现在,我可以假设即使适配器的 Insert command 为空,也会插入新行吗?对吗?
    • 不,你不能这么认为。根据我在回答中所说的,如果未设置InsertCommand,适配器将设置参数并调用ExecuteNonQuery?如果您也使用命令生成器,那么假设满足某些条件,它将按需为您生成操作命令,否则,您必须自己设置它们。也许阅读this
    • 这很清楚。我问这个是因为我遇到了关于写入只读列的问题。 Products 表有一个名为“ProdNum”的主键列(自动递增)。如您所见,在初始化数据行时,我没有为该列设置值。而且我的 Insert command 也没有该列。但是我仍然遇到异常Column ProdNum is read-olny。你能帮忙吗?
    • 这是一个不同的问题,所以开始一个新线程。提供一个专门描述该问题的标题,并提供与该问题相关的所有信息。如果我看到这个问题并且没有其他人提供答案,我会尽我所能。
    • 我已经问过这个问题了。没有得到完美的解决方案。请看link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2020-02-09
    • 2013-04-19
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多