2016-12-20 32 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只是縮短代碼。

相關問題