none
如何將資料列一次插入多次? RRS feed

  • 問題

  • TABLE-1
    A        B          C        D          E
    X1   10/11     20    100        aa
    X2    9/6        25    105        bb
    --------------------------------
    TABLE-2
    A     B          C
    X1 10/11    20
    X1 10/10    20
    X1 10/9      20
    X1 10/8      20
    X1 10/7      20

    大大們好,小弟又來勞煩各位了,現在TABLE-1 的第一列資料 必須填入到TABLE-2

    而且要一次插入到TABLE-2七次,也就是七天,類似上面TABLE-2的結果,問題點就是..

    一定要在外層跑個迴圈判斷有幾列資料要輸入,然後內層迴圈執行一列資料需要幾天,然後如何將第一天,第二天..第七天..以此類推

    分別做資料表的插入動作,正是問題所在,有想過要用迴圈..可是不會寫...或者有其他更好辦法?

    問題這樣描述 不知道是否清楚>"<?

    我是用VS2005 和SQL2005 測試,麻煩大大們了,謝謝.
    • 已移動 璉璉 2011年10月15日 上午 01:17 (從:Visual Studio一般討論區(General))
    2011年10月11日 上午 05:35

解答

  • 可以用迴圈做, 請參考:

    新增記錄的做法:Inserting Records

    迴圈的用法:For Loop

     

     

    2011年10月11日 上午 07:08
  • 安你好

    請直接參考

     '利用 For Each 去讀取 table1 每一列資料
            For Each row1 As DataRow In table1.Rows
                For i As Integer = 1 To 7 '設定天數
                    '請自行處理要新增的日期變化
                    table2.Rows.Add(New Object() {row1.Item("A"), row1.Item("B"), row1.Item("C")})
                Next
            Next
    

    建議

    請先MSDN For each 的用法

    再多了解看看 MSDN DataTable 

    2011年10月11日 上午 09:18
  • 安你好

    請直接參考

     

     '利用 For Each 去讀取 table1 每一列資料
            For Each row1 As DataRow In table1.Rows
                For i As Integer = 1 To 7 '設定天數
                    '請自行處理要新增的日期變化
                    table2.Rows.Add(New Object() {row1.Item("A"), row1.Item("B"), row1.Item("C")})
                Next
            Next
    

     

    建議

    請先MSDN For each 的用法

    再多了解看看 MSDN DataTable 


    如果只是把dt1 copy到 dt2的話,也可以使用

    table2.Rows.Add(row1.ItemArray())

    可以參考

    DataGridView Rows Copy

     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年10月11日 上午 09:55
  • 應該好好地複習array,collection,還有基本回圈的運作。

    先試試把回圈結果印出,如果結果以你想法一致,在改成insert table。

    編寫程式原則,只要是邏輯正確,結果永遠就是對的

    2011年10月11日 下午 06:42

所有回覆

  • 語言是vb.net
    2011年10月11日 上午 05:36
  • 可以用迴圈做, 請參考:

    新增記錄的做法:Inserting Records

    迴圈的用法:For Loop

     

     

    2011年10月11日 上午 07:08
  • this大你好

    可能是文意表達錯誤..

    問題點是..如果使用迴圈,我不知道如何將table-1 的資料 依序填入到 table-2,

    勢必要用到陣列吧?如何將資料表的資料列弄成 陣列?

    2011年10月11日 上午 07:33
  • 安你好

    請直接參考

     '利用 For Each 去讀取 table1 每一列資料
            For Each row1 As DataRow In table1.Rows
                For i As Integer = 1 To 7 '設定天數
                    '請自行處理要新增的日期變化
                    table2.Rows.Add(New Object() {row1.Item("A"), row1.Item("B"), row1.Item("C")})
                Next
            Next
    

    建議

    請先MSDN For each 的用法

    再多了解看看 MSDN DataTable 

    2011年10月11日 上午 09:18
  • 安你好

    請直接參考

     

     '利用 For Each 去讀取 table1 每一列資料
            For Each row1 As DataRow In table1.Rows
                For i As Integer = 1 To 7 '設定天數
                    '請自行處理要新增的日期變化
                    table2.Rows.Add(New Object() {row1.Item("A"), row1.Item("B"), row1.Item("C")})
                Next
            Next
    

     

    建議

    請先MSDN For each 的用法

    再多了解看看 MSDN DataTable 


    如果只是把dt1 copy到 dt2的話,也可以使用

    table2.Rows.Add(row1.ItemArray())

    可以參考

    DataGridView Rows Copy

     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年10月11日 上午 09:55
  • 應該好好地複習array,collection,還有基本回圈的運作。

    先試試把回圈結果印出,如果結果以你想法一致,在改成insert table。

    編寫程式原則,只要是邏輯正確,結果永遠就是對的

    2011年10月11日 下午 06:42
  • 可以麻煩幫我看一下這段code有什麼問題嗎?

    "update Main set  mytable.Rows(u).Item(4)  ='" & mytable.Rows(u).Item("Unfinished") & "'- '" & mytable.Rows(u).Item("HightProduce") & "' where SerialNo='" & mytable.Rows(u).Item("SerialNo") & "'"

    下面是完整的code:

    Public Class Form1

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


            Dim ConnString3 As String = ""
            ConnString3 = "server=192.168.89.51;Initial Catalog=Travel;User ID=sa;Password=sa;Trusted_Connection=False"
            Dim conn3 As New SqlConnection(ConnString3)
            conn3.Open()
            Dim selap As New SqlDataAdapter("select * from main", conn3)
            Dim ds As New DataSet
            selap.Fill(ds, "Main")
            Dim mytable As DataTable = ds.Tables("Main")

            For u As Integer = 0 To mytable.Rows.Count - 1 Step 1
                If mytable.Rows(u).Item("Unfinished") Mod mytable.Rows(u).Item("HightProduce") <> 0 Then

                    Dim int_needDAY As Integer = mytable.Rows(u).Item("Unfinished") / mytable.Rows(u).Item("HightProduce") + 1


                    For j As Integer = 0 To int_needDAY - 1 Step 1


                        Dim ConnString4 As String = ""
                        ConnString4 = "server=192.168.89.51;Initial Catalog=Travel;User ID=sa;Password=sa;Trusted_Connection=False"
                        Dim conn4 As New SqlConnection(ConnString4)
                        conn4.Open()

                        Dim selstr5 As String = "insert into source(SerialNO,ProduceDate,ProduceQuantity) values('" & mytable.Rows(u).Item("SerialNo") & "','" & CType(mytable.Rows(u).Item("ScheduleDate"), Date).AddDays(-j) & "','" & mytable.Rows(u).Item("HightProduce") & "')"
                        Dim com5 As SqlCommand = New SqlCommand(selstr5, conn4)
                        com5.ExecuteNonQuery()
                        com5.Cancel()
                        conn4.Close()

                        Dim ConnString8 As String = ""
                        ConnString8 = "server=192.168.89.51;Initial Catalog=Travel;User ID=sa;Password=sa;Trusted_Connection=False"
                        Dim conn8 As New SqlConnection(ConnString8)
                        conn8.Open()
                        Dim updastr As String = "update Main set  mytable.Rows(u).Item(4)  ='" & mytable.Rows(u).Item("Unfinished") & "'- '" & mytable.Rows(u).Item("HightProduce") & "' where SerialNo='" & mytable.Rows(u).Item("SerialNo") & "'"
                        Dim com8 As SqlCommand = New SqlCommand(updastr, conn8)
                        com8.ExecuteNonQuery()
                        com8.Cancel()


                    Next

                End If

            Next 

        End Sub


    2011年10月13日 上午 12:50
  • (1) 第一個問題, 好好把ADO.NET 參數式查詢學起來, 少用串接的方法寫 SQl Statemnet 中的條件式, 以避免SQL Injection

    [論壇關於SQL Injection的討論]

    (2) 你呼叫 [SqlCommand.Cancel 方法]的理由是什麼 ?

    (3) 你應該先描述你執行後發生了什麼樣的問題, 而不是只丟Code出來就問說有什麼問題, 不要把別人當成免費程式碼除錯人員.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年10月13日 上午 04:29