【问题标题】:How to refresh the datatable after updated value with SqlCommand statement?使用 SqlCommand 语句更新值后如何刷新数据表?
【发布时间】:2017-01-11 22:44:01
【问题描述】:

我有 DataTable 加载了 SqlDataReader 查询。在我的DataTable 加载后,我循环使用SqlCommand 每个索引插入数据。但是DataTable 没有刷新。如何在数据库中更新数据时刷新DataTable

    connectionx()
        Dim dtreader As SqlDataReader
        Dim cmddt As New SqlCommand("SELECT * from sometable", con)

        dtreader = cmddt.ExecuteReader()

        Dim dt As New System.Data.DataTable()
        dt.Load(dtreader) 'Here from datareader


        For index As Integer = currentRow To dt.Rows.Count - 1
            Dim drR As DataRow = dt.NewRow()
            Dim reader1 As SqlDataReader

            Dim EP As DateTime
            Dim EndW As String = dtnow.ToString("MM/dd/yyyy HH:mm")
            Dim setEndWaiting As Integer = Convert.ToInt32(adapterSch.SetEndWTime(EndW, Convert.ToInt32(Session("ShipLoadingOrderFK"))))


                Dim startPre As DateTime = EndW
                Dim endPre As DateTime = startPre + TimeSpan.Parse(defPre)
                Dim setPreDocumentTime As Integer = Convert.ToInt32(adapterSch.SetPreDocumentTime(startPre, endPre, Convert.ToInt32(Session("ShipLoadingOrderFK"))))

                Dim startPump As DateTime = endPre
                Dim endPump As DateTime
                Dim shipKey As String = Shipid.SelectedValue
                pumpigResult(MinutePumpResult, HoursPumpResult, FlowrateValue, Shipid.SelectedValue, Loading_No.Value, typeLoading.SelectedValue)
                If FlowrateValue = 0 Or FlowrateValue = "" Then
                    endPump = endPre + TimeSpan.Parse(defPumping)
                Else
                    endPump = endPre + New TimeSpan(HoursPumpResult, MinutePumpResult, 0)
                End If
                Dim setPumpTime As Integer = Convert.ToInt32(adapterSch.SetPumpingTime(startPump, endPump, Convert.ToInt32(Session("ShipLoadingOrderFK"))))

                Dim startPost As DateTime = endPump
                Dim endPost As DateTime = endPump + TimeSpan.Parse(defPost)
                Dim setPostTime As Integer = Convert.ToInt32(adapterSch.SetPostTime(startPost, endPost, Convert.ToInt32(Session("ShipLoadingOrderFK"))))

在插入数据后,每个索引都使用上面的代码。我已经获得了上一行(索引 1)的值,但我获得了 更新前的旧数据

Dim EP as datetime = Convert.ToDateTime(dt.Rows(index - 1)("PostDocEnd").ToString())

如何刷新DataTable,以便获取之前更新过的数据?我尝试再次重新加载DataTable,但什么都没有。

谢谢

【问题讨论】:

  • 事件虽然那里有很多代码,但您实际上并没有显示与所描述的问题相关的任何内容。没有插入,没有“刷新”。我没有看到该循环的意义或创建的新行
  • 为什么用 currentRow 开始循环以及在哪里设置初始值。我没有看到 For 语句的 Next。看来代码不完整。您创建新行 drR 并且未在循环内初始化。检查您的代码并完成它,以便我们帮助发现问题。

标签: c# sql-server vb.net datatable


【解决方案1】:

解决了! 我只是在开始索引循环并刷新数据表时重新加载数据读取器的行代码。

    dt.reset()
    dtreader = cmddt.ExecuteReader()
    Dim dt As New System.Data.DataTable()
    dt.Load(dtreader)

更改数据库时会重新加载数据表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多