Solved

Urgent!!! Urgent! Only one row is being added to table.

Posted on 2007-04-04
8
210 Views
Last Modified: 2010-04-16
When I trace the below code. I see that there are at least there rows for a MaxPeriod of

3. But the table just keeps adding the a new row to the same place.

For Index As Integer = 0 To MaxPeriod - 1

' Get date period

StoredProcName = dbName & ".dbo.usp_GetDatePeriodFromTo"

cmd = dbManager.GetStoredProcCommand(StoredProcName)

dbManager.AddInParameter(cmd, "@YEARMONTH", DbType.String, DtPeriod)



DtPeriod = IncrementDate(DtPeriod, DateIndex)

' Put the yearmonth, start date ,and end date in a dataset

Dim myDs As DataSet = dbManager.ExecuteDataSet(cmd)

' check myTable first

Dim myRow As DataRow


Dim myTable As DataTable = myDs.Tables(0)

If myTable.Rows.Count >= Index Then

myRow = myTable.Rows(Index)

End If

Dim row As DataRow = myTable.NewRow()

row.ItemArray = myRow.ItemArray



Next

Return retVal



0
Comment
Question by:mathieu_cupryk
  • 5
  • 3
8 Comments
 
LVL 23

Expert Comment

by:Jens Fiederer
ID: 18849906
Like I said in our other thread,

You keep recreating the table every time through the loop.

If you want to ADD to the table, create a table OUTSIDE the loop and add rows INSIDE.
0
 

Author Comment

by:mathieu_cupryk
ID: 18850001
Dim myTable As DataTable = myDs.Tables(0)
?
0
 

Author Comment

by:mathieu_cupryk
ID: 18850012
Dim myDs As DataSet = New DataSet()
           
0
 

Author Comment

by:mathieu_cupryk
ID: 18850018
How about this?

 Public Function GetBusinessCalendarPeriod(ByVal dbName As String, ByVal DatePeriod As String, ByVal txtMaxPeriod As String) As DataTable

            Dim retVal As New DataTable("BusinessCalendars")
            Dim DtPeriod As String = DatePeriod
            Dim MaxPeriod As Integer = Int32.Parse(txtMaxPeriod)
            Dim cmd As DbCommand
            Dim tmpds As DataSet = New DataSet()
            Dim StoredProcName As String = String.Empty
            Dim DateIndex As Integer = 1

            Dim myDs As DataSet = New DataSet()
           
            'We get the divisions
            For Index As Integer = 0 To MaxPeriod - 1
                ' Get date period

                StoredProcName = dbName & ".dbo.usp_GetDatePeriodFromTo"
                cmd = dbManager.GetStoredProcCommand(StoredProcName)
                dbManager.AddInParameter(cmd, "@YEARMONTH", DbType.String, DtPeriod)


                DtPeriod = IncrementDate(DtPeriod, DateIndex)
                ' Put the yearmonth, start date ,and end date in a dataset
                myDs = dbManager.ExecuteDataSet(cmd)

               ' check myTable first
                Dim myRow As DataRow
               
                Dim myTable As DataTable = myDs.Tables(0)

                If myTable.Rows.Count >= Index Then
                    myRow = myTable.Rows(Index)
                End If

                Dim row As DataRow = myTable.NewRow()

                row.ItemArray = myRow.ItemArray


            Next
            Return retVal

        End Function
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 23

Expert Comment

by:Jens Fiederer
ID: 18850408
I was expecting something more like:

    Public Function GetBusinessCalendarPeriod(ByVal dbName As String, ByVal DatePeriod As String, ByVal txtMaxPeriod As String) As DataTable
        Dim retVal As New DataTable("BusinessCalendars")
        retVal.Columns.Add("yearmonth")
        retVal.Columns.Add("startdate")
        retVal.Columns.Add("enddate")
        Dim DtPeriod As String = DatePeriod
        Dim MaxPeriod As Integer = Int32.Parse(txtMaxPeriod)
        Dim StoredProcName As String = dbName & ".dbo.usp_GetDatePeriodFromTo"

        'We get the divisions

        For Index As Integer = 0 To MaxPeriod - 1
            ' Get date period
            DtPeriod = IncrementDate(DtPeriod, Index + 1)
            'Dim cmd As DbCommand = dbManager.GetStoredProcCommand(StoredProcName)
             dbManager.AddInParameter(cmd, "@YEARMONTH", DbType.String, DtPeriod)

            Dim row As DataRow = retVal.NewRow()        ' Create new row as the index in the for increases

            'Put the yearmonth, start date ,and end date in a dataset
            Dim tmpds As Dataset = dbManager.ExecuteDataSet(cmd)        ' This will put it in a dataset
            row.ItemArray = tmpds.Tables(0).Rows(0).ItemArray
            retVal.Rows.Add(row)
        Next

        Return retVal
    End Function
0
 
LVL 23

Accepted Solution

by:
Jens Fiederer earned 500 total points
ID: 18850430
This will be my last message to you.

A "C" is like a slap in the face.
0
 

Author Comment

by:mathieu_cupryk
ID: 18850447
why did u put    'Dim cmd As DbCommand = dbManager.GetStoredProcCommand(StoredProcName)
        in comments?
0
 

Author Comment

by:mathieu_cupryk
ID: 18851024
Excellent Excellent Job!!!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Loop not working 29 47
Iterate two lists and remove inactive 11 49
Two different visual studio versions 3 23
use of unassigned local variable 'id' 6 27
Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.

896 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now