为什么此 DataAdapter 不将行插入数据库?

2023-12-08

因此,我遇到了一种情况,我使用 SqlDataAdapter 将行插入 SQL Server 2014 数据库中的表中。

数据来源是 Excel 电子表格。

当使用几个 For 循环以及 .Columns.Add 和 .Rows.Add 填充 DataTable 对象以从 Excel 工作表复制数据时,插入工作正常。我没有在此包含此工作代码。

但是,我正在重构代码以使用 OleDbDataReader。这是我的功能:

Private Function FillDataTable(path As String, name As String) As DataTable
        Dim fullpath As String = path
        Dim wsname As String = name
        Dim dt = New DataTable()
        Try
            Dim connectionstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & fullpath & "';Extended Properties= 'Excel 8.0;HDR=Yes;IMEX=1'"
            Dim commandstring As String = "Select * From " & wsname
            Using con As New OleDbConnection(connectionstring)
                Using cmd As New OleDbCommand(commandstring, con)
                    con.Open()
                    Using dr As OleDbDataReader = cmd.ExecuteReader()
                        With dt
                            For Each c In aryFieldList
                                .Columns.Add(c.FieldName, ConvertType(c.DataType))
                            Next

                            .Columns.Add("SubmID")
                            .Columns("SubmID").DefaultValue = 0

                            .Columns.Add("S_ORDER")
                            .Columns("S_ORDER").DefaultValue = 0

                            .Columns.Add("C_ORDER")
                            .Columns("C_ORDER").DefaultValue = 0
                        End With
                        dt.Load(dr)
                    End Using
                End Using
            End Using

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Return dt

    End Function

当我调试时,从函数返回的 DataTable 具有集中的数据,并且在其他方​​面似乎与以前版本的代码中的 DataTable 相同。这是更新数据库的代码。这段代码是不变对于这两种情况。

    Dim dt = New DataTable()
    dt = FillDataTable(fullpath, wsname)

Using cn = New SqlConnection(ConfigurationManager.ConnectionStrings("Connection").ConnectionString)
    cn.Open()
    Using adp = New SqlDataAdapter()
        Dim sb As New StringBuilder

        [...StringBuilder code to build the Insert command here...]

        Dim cmd As New SqlCommand(sb.ToString, cn)

        With adp
            .InsertCommand = cmd
            .InsertCommand.Parameters.Add("SubmID", SqlDbType.Int, 1, "SubmID")
            .InsertCommand.Parameters.Add("S_ORDER", SqlDbType.Int, 1, "S_ORDER")
            .InsertCommand.Parameters.Add("C_ORDER", SqlDbType.Int, 1, "C_ORDER")

            For Each p In aryFieldList
                If p.Excluded = False Then
                    .InsertCommand.Parameters.Add(p.FieldName, p.DataType, p.Length, p.FieldName)
                End If
            Next
                adp.Update(dt)

        End With 'adp
    End Using 'adp
End Using 'cn

不会抛出任何异常。调试 adp.Update(dt) 行没有延迟,就好像查询根本没有执行一样。这是我注意到添加的行/列 DT 和 OleDB 填充的 DT 之间的唯一区别——数据成功插入时有轻微的延迟时间。

我是否缺少某种基本功能或属性DataTable或者可能是在加载期间继承或创建的属性?难道还有什么我没想到的吗?为什么我的SqlDataAdapter当源是a时将数据插入数据库DataTable手动创建与DataTable填充由OleDbReader?


Each DataTable追踪RowState的行,因此可以在循环中手动添加数据,因为它们都是Added(它与手动创建无关DataTable- 它的rows)。当您从 Excel 等其他来源加载时,它们是not添加/新增。

如果您使用DataAdapter填写表格,你可以告诉它not设置RowState至不变。这对于将数据从一个数据存储迁移到另一个数据存储非常有用:

myDA.AcceptChangesDuringFill = False
...
rows = myDA.Fill(xlDT)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么此 DataAdapter 不将行插入数据库? 的相关文章

随机推荐

  • TcpListener 与 SocketAsyncEventArgs

    是否有正当理由不使用TcpListener用于实现高性能 高吞吐量TCP服务器而不是SocketAsyncEventArgs 我已经使用以下方法实现了这个高性能 高吞吐量 TCP 服务器SocketAsyncEventArgs使用大的预分配
  • WebBrowser - 空文档文本

    我正在尝试使用WebBrowser类 但当然这是行不通的 My code WebBrowser browser new WebBrowser browser Navigate http www google com while browse
  • 黑莓 - 更改设备上的纬度和经度以测试应用程序

    我想在设备上测试我的应用程序 是否可以在设备设置中的某个位置对纬度和经度值进行硬编码 以便应用程序读取这些值而不是当前位置 我想在当前位置以外的不同位置测试我的应用程序 在 BB 模拟器中 您可以转到 模拟 gt GPS 位置 单击 添加
  • 在 Google 地图中显示我当前的位置

    最后我成功显示了地图 现在 我想显示我当前的位置 我尝试使用这些代码 但当我单击右上角的我的位置按钮时它不起作用 AndroidManifest xml
  • 如何检测正在编辑的单元格是否属于定义的名称范围的最后一行

    我有一个定义的名称 称为 Input Range 如果正在编辑输入范围的最后一个空行 向空行添加值 则自动插入一个空行 我已经研究这个问题几天了 但没有解决方案 我只能做 Worksheet change 事件检测定义的名称范围内的数据是否
  • 如何抓取 Tableau 仪表板,其中单击地图后数据仅显示在图中?

    我正在尝试从中抓取数据这个公共 Tableau 仪表板 兴趣在于时间序列绘制的数据 如果我单击地图中的特定状态 时间序列将更改为该特定状态 下列的this and this我得到了在国家一级汇总的时间序列的结果 使用下面提供的代码 但我感兴
  • 我可以在打字稿中声明静态私有函数吗?

    我有以下代码 module Dialog export class Modal static createAccessModal link Link createModal link static createAdminModal link
  • 将 android:layoutAnimation 添加到 LinearLayout 会导致 FC

    我在 menu xml 中有以下 XML 它是一个我需要设置动画的 LinearLayout 因此我使用layoutAnimation 属性 如果没有这个属性 布局会完美地显示 但是设置了这个属性后 我会得到一个令人讨厌的强制关闭 我不明白
  • 您的 BDD 规范是否应该与 UI 测试分开?

    昨天我参加了一场精彩的演讲戈伊科 阿季奇关于 BDD 我可能错过了他说的一两件事 所以这里有一个问题希望能为我澄清一些事情 通常 当您在网上看到 BDD 示例时 它们会在 UI 中包含步骤 在小黄瓜语言中 您经常可以看到类似以下内容 Sce
  • Android Web 视图中的所见即所得

    我一直在尝试从我的应用程序内部向我的用户提供所见即所得的 HTML 编辑器 它不必是花哨的所见即所得 我只需要基本功能 如粗体 斜体 下划线 图像 链接和一些基本格式 字体大小 颜色 对齐方式 那应该足够了 完美的解决方案是一个开源库 但我
  • Angular 4:API调用后更新模板变量[重复]

    这个问题在这里已经有答案了 我有一个组件指令 用于显示带有一些信息的 div 该组件称为站点组件并包含在页面中 该人的主要行为站点组件很好 除了这个 我有一个对后端的 API 调用 我在其中返回一些数据 后端调用执行良好 我收到了信息 但变
  • 在内联汇编中使用双精度数字(GCC、IA-32)

    我刚刚开始在计算机科学课上学习汇编 并且我有一项作业是使用指定的舍入模式对浮点值进行舍入 我尝试使用它来实现fstcw fldcw and frndint 我修改舍入控制位 对数字进行舍入 然后恢复以前的控制位 分配的要求 目前突出的问题是
  • 为什么协程停止工作/执行

    我有一个 3 秒倒计时器 当游戏取消暂停时会激活该计时器 几天前我还可以正常工作 但现在它不再工作了 它在号码 3 上被阻止 这是代码 IEnumerator Timer Time timeScale 0 objectWithGSScrip
  • 如何有效地使用绑定框架

    我已经使用绑定框架有一段时间了 我想知道您如何处理这种情况 你有一份报纸 它有一些属性 比如 字符串 标题 布尔值 已发布 日期 出版日期 在您看来 您有一份报纸列表 可以同时编辑所有报纸 这意味着您可以在单个请求中更改所有报纸的标题或所有
  • 实体框架在哪里存储属性名称与其在 SQL 中选择的列之间的映射?

    我正在尝试使用 ObjectQuery 的 ToTraceString 在 EF 4 3 上构建一些自定义扩展 以从 LINQ 代码生成原始 SQL 我注意到 虽然在某些情况下 SQL 中的列名称与查询元素类型的属性名称相匹配 但在其他情况
  • 为什么代码 this 指向 window 对象?

    我的代码是 var length 20 function fn console log this length var o length 10 e function fn fn arguments 0 o e fn 输出是20 1 谁能告诉
  • 所有浏览器都会忽略无名输入字段吗?

    如果没有指定 name 属性 是否可以保证浏览器不会发送输入元素 例如 我们可以假设 POST 下面的表单不会发送信用卡号吗
  • NullPointerException:重写派生类中基类的构造函数调用方法

    我有这个代码片段 class Base public Base method void method System out println In Base class Derived extends Base private String
  • 用于处理多个未知回调的 JavaScript 函数

    我有一个场景 我想将 2 个或更多函数 作为参数 发送到处理函数中 并让该处理函数执行每个传递的函数作为前面函数的回调函数 这是我试图编写的函数的一般概念 function functionChain MAKE SURE WE HAVE A
  • 为什么此 DataAdapter 不将行插入数据库?

    因此 我遇到了一种情况 我使用 SqlDataAdapter 将行插入 SQL Server 2014 数据库中的表中 数据来源是 Excel 电子表格 当使用几个 For 循环以及 Columns Add 和 Rows Add 填充 Da