【问题标题】:Selecting a particular column from dataTable and updating values in all the rows从 dataTable 中选择特定列并更新所有行中的值
【发布时间】:2016-12-20 19:34:30
【问题描述】:

我目前正在从 SQL 中选择一堆值并将它们加载到数据表中。我正在尝试查找该特定列并更新每行中的值。

Dim dt as DataTable
'not all code is included - but this definitely works on selecting data
sql = " Select value1, value2, value3 from TblA "
cmd = New SqlClient.SqlCommand(sql, conn)
Dim reader As SqlDataReader = cmd.ExecuteReader
dt.Load(reader)
return dt

我的目标是从 VALUE3 中的每一行获取值,并通过一个名为 UpdateFormat 的小型格式化函数运行它。类似的东西......

Dim specValue As String
For Each row As DataRow In dt.Rows
      UpdateFormat(specValue ) = row.Item("Value3")
Next row

我希望更新每个值并更新 dataTable,使其具有正确的值。

【问题讨论】:

  • 您是否要更改 value3 或从 value3 中的任何内容创建格式化的内容并保存到新列 - 我最初建议后者,以便其他任何地方需要它未格式化的仍然可以访问它。
  • @plutonix 我想​​更新 value3 并将其保留在同一列中。基本上从“Value3”列中取出每一行并使用我的 UpdateFormat 函数对其进行更新。对不起,如果我不清楚。没有其他东西需要它未格式化 - 我只将那个数据集/数据表用于我的报告。
  • 我的问题与此范围有关。您是否确定如果您更改/格式化 value3 而不是创建一个新列并将格式化的值保存在那里,什么都不会破坏?
  • 在你的循环中:row("Value3") = ApplyFormat(row.Field(Of String)("Value3"))
  • 没有什么是因为您想在填满表格后立即为特定列的每条记录提供特殊格式...为什么要这样做之后 i> 当你可以在 SQL 中执行它时,它已经被格式化了,这更有意义,并且减少了可能出错的繁重工作......只是我的两分钱......无论如何我看到了 UpdateFormat 是什么接受一个字符串,并可能更新一个特定的项目以匹配值 3.. 这仍然没有任何意义。

标签: vb.net datatable


【解决方案1】:

在上一集中,我们了解到您希望将该列中的数据从 012345678 格式化为 012-34-5678W,其中该列是 VarChar 并且“W”是固定的。

您可以在 SQL 中进行格式化:

Dim sql = <sql>
              SELECT Id, Foo, Bar, ColA, 
                    CONCAT(SUBSTRING([Value3],1,3), 
                            '-', 
                        SUBSTRING([Value3],4,2), 
                        '-', 
                        SUBSTRING([Value3],6,4), 
                        'W' ) AS NewV3Value 
                FROM 
                    dbo.TableBob
          </sql>.Value

这样做后,该列会以已格式化的形式交付给您。根据您的数据库风格,确切的语法可能会有所不同。

&lt;sql&gt;...&lt;/sql&gt;.Value 只是一个 XML 文字,它允许您以一种更易于阅读的方式格式化长或复杂的查询。

在桌子上自己做。由于格式很容易应用,所以你真的不需要方法来做到这一点:

Dim tmp As String
For Each row As DataRow In dt.Rows
    tmp = row.Field(Of String)("Value3")
    row("Value3") = String.Format("{0}-{1}-{2}W", 
                                     tmp.Substring(0, 3),
                                     tmp.Substring(3, 2),
                                     tmp.Substring(5, 4))
Next row

tmp var 只是为了缩短代码。

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多