2016-12-20 43 views
1

我正在从SQL中选择一堆值并将它们加载到dataTable中。我试图找到特定的列并更新每行中的值。从dataTable中选择一个特定的列并更新所有行中的值

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,使其具有正确的值。

+0

你想**改变** value3或创建从value3中的任何值的格式化的东西,并保存到一个新的列 - 我最初会建议后者,以便其他地方需要它UNformatted仍然可以访问它。 – Plutonix

+0

@plutonix我想更新value3并将其保留在同一列中。基本上从列“Value3”的每一行,并使用我的UpdateFormat函数更新它。对不起,如果我不清楚。没有其他任何东西会需要它的格式 - 我只使用那个数据集/数据表来做我的报告。 – BobSki

+0

我的问题涉及到这个范围。如果你改变/格式化value3而不是创建一个新列并将格式化值保存在那里,你是否确定***没有什么会中断? – Plutonix

回答

1

在之前的一集中,我们了解到您要将该列中的数据从更改为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 

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

<sql>...</sql>.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只是缩短代码。

相关问题