Program not responding fast enough - vb.net
To get started I created a program at work to read our network tools and store the retrieved data to our database. No problem but the way I set it up originally was every tool had its own instance and was hard coded for each tool.
Now I was tasked with making the program more user friendly so I can send it to other places. So now I database the IP address of tool and location on assembly line so I can cross reference while the code is executing.
On the new program I created an array of my Tool Reader class:
Dim TB(50) As ReadAtlascopco
Then I run through this loop on form load:
Private dict As New Dictionary(Of Timer, Label)()
Private Sub CreateTimers()
For i = 0 To IPCount
TB(i) = New ReadAtlascopco
' timer(i) = New Timerarray
Next
For i As Integer = 1 To IPCount
C = i - 1
timer = New Timer() With {.Interval = 250, .Enabled = True, .Tag = i.ToString}
AddHandler timer.Tick, (AddressOf timer_Tick)
' timer.Interval = (100 * i)
label = New Label()
label.Name = "label" & i
label.Location = New Point(10, 10 + i * 25)
label.Font = New Font("Sans Serif", 9, FontStyle.Bold)
label.AutoSize = True
'label.Width = 100
'label.AutoEllipsis = False
label.TabIndex = i
label.Visible = True
Me.Controls.Add(label)
dict(timer) = label
TB(C).ipaddress = TBData(C)
TB(C).StartConnection()
timer.Enabled = True
timer.Start()
Next
Then I go through the timer tick event. Everything works great up until this point. Once I go through the tick event it starts lagging and I miss data.
Is there a way to speed this process up?
Here is the tick event:
Private Sub timer_Tick(ByVal sender As Object, ByVal e As EventArgs)
Dim Stop_Num(50) As String
Dim Line_Name(50) As String
Dim t As Timer = DirectCast(sender, Timer)
Dim s As Integer = Val(t.Tag) - 1
Param1 = TBData(s)
CWE(s) = False
If Activestat(s) = True Then
Dim SQL1 As String = "SELECT Stop_Num FROM TBL_Added_Boxes Where(IP_Address = N'" + Param1 + "')"
Dim output1 As String
Using cn = New SqlConnection(My.Settings.Torque_InfoConnectionString)
Using cmd = New SqlCommand(SQL1, cn)
cn.Open()
Try
Dim dr1 = cmd.ExecuteReader()
While dr1.Read()
output1 = dr1("Stop_Num").ToString()
End While
Catch ex As SqlException
WriteToErrorLog("Error pulling data from the database in reguards to torque box info (Stop Number).", ex.ToString(), "Failed to retreive Torque controler Info .")
End Try
cn.Close()
End Using
End Using
Stop_Num(0) = output1
Dim SQL2 As String = "SELECT Line_On FROM TBL_Added_Boxes Where(IP_Address = N'" + Param1 + "')"
Dim output2 As String
Using cn = New SqlConnection(My.Settings.Torque_InfoConnectionString)
Using cmd = New SqlCommand(SQL2, cn)
cn.Open()
Try
Dim dr2 = cmd.ExecuteReader()
While dr2.Read()
output2 = dr2("Line_On").ToString()
End While
Catch ex As SqlException
WriteToErrorLog("Error pulling data from the database in reguards to torque box info (Line On).", ex.ToString(), "Failed to retreive Torque controler Info .")
End Try
cn.Close()
End Using
End Using
Line_Name(0) = output2
If Line_Name(0) = "Line 1" Then
Newlinename(s) = "Line1Serial"
ElseIf Line_Name(0) = "Line 2" Then
Newlinename(s) = "Line2Serial"
ElseIf Line_Name(0) = "Line 3" Then
Newlinename(s) = "Line3Serial"
End If
Param3 = Stop_Num(0)
Param2 = Newlinename(s)
Dim SQL As String = "SELECT " + Newlinename(s) + " FROM TBL_RunningLineStatus Where(Stop_Number = N'" + Stop_Num(0) + "')"
Dim output As String
Using cn = New SqlConnection(My.Settings.ScanBypassConnectionString)
Using cmd = New SqlCommand(SQL, cn)
cn.Open()
Try
Dim dr = cmd.ExecuteReader()
While dr.Read()
output = dr(Param2).ToString()
End While
Catch ex As SqlException
WriteToErrorLog("Error Pulling Data From The Database In reguards to Seat Data.", ex.ToString(), "Failed to retreive buildline data.")
End Try
cn.Close()
End Using
End Using
TBSData(s) = output
If Killall = "True" Then
t.Stop()
Else
Try
TB(s).GetData()
If TB(s).Colorselect = 0 Then
dict(t).BackColor = System.Drawing.Color.GreenYellow
dict(t).ForeColor = Color.Black
ElseIf TB(s).Colorselect = 1 Then
TB(s).ipaddress = TBData(s)
TB(s).StartConnection()
dict(t).BackColor = System.Drawing.Color.Red
dict(t).ForeColor = Color.White
ElseIf TB(s).Colorselect = 2 Then
dict(t).BackColor = System.Drawing.Color.Purple
dict(t).ForeColor = Color.White
End If
If Olddata(s) <> TB(s).TorboxData(20) Then
Cname(s) = TB(s).TorboxData(2)
Tstatus(s) = TB(s).TorboxData(7)
TValue(s) = TB(s).TorboxData(19)
Sdata(s) = TBSData(s)
Tfinal(s) = TB(s).TorboxData(18)
TPset(s) = TB(s).TorboxData(30)
TFinalAngle(s) = TB(s).TorboxData(24)
RDAmin(s) = TB(s).TorboxData(25)
RDAmax(s) = TB(s).TorboxData(26)
RDAactual(s) = TB(s).TorboxData(27)
RDAStat(s) = TB(s).TorboxData(15)
Anglemin(s) = TB(s).TorboxData(21)
Anglemax(s) = TB(s).TorboxData(22)
AngleFT(s) = TB(s).TorboxData(23)
Anglestat(s) = TB(s).TorboxData(13)
Tormin(s) = TB(s).TorboxData(16)
Tormax(s) = TB(s).TorboxData(17)
TTTights(s) = TB(s).TorboxData(28)
TTSerial(s) = TB(s).TorboxData(29)
Olddata(s) = TB(s).TorboxData(20)
CWE(s) = True
dict(t).Text = t.Tag + " ) " + "Controler Name : " + TB(s).TorboxData(2) + ": Status : " + TB(s).Connectiontext + " : Date : " + Now() + " :: SERIAL # : " + Sdata(s) + " : From : " + Newlinename(s) + " :: Stop : " + Param3 + ""
' .Text = t.Tag + " ) " + "Controler Name : " + TB(s).TorboxData(2) + ": Status : " + TB(s).Connectiontext + " : Date : " + Now() + " :: SERIAL # : " + Sdata(s) + " : From : " + Newlinename(s) + " :: Stop : " + Param3 + "")
dict(t).BackColor = System.Drawing.Color.Yellow
Else
If TB(s).networkconnected = True Then
dict(t).AutoSize = True
'dict(t).Text = "Controler Name : " + TB(s).TorboxData(2) + ": Status : " + TB(s).Connectiontext + " : Date : " + Now()
dict(t).BackColor = System.Drawing.Color.Yellow
dict(t).ForeColor = Color.Black
Else
dict(t).Text = TB(s).Connectiontext + " :::: " + Now() + " :: " + TBData(s)
dict(t).BackColor = System.Drawing.Color.Red
dict(t).ForeColor = Color.White
End If
End If
Catch ex As Exception
WriteToErrorLog("Error Reading the torque box .", ex.Message, "Failed read torque data.")
Finally
'If CWE(s) = True Then
' Call Data_Entry()
'End If
If TValue(s) <> "" And CWE(s) = True Then
Try
con.ConnectionString = My.Settings.ScanBypassConnectionString
con.Open()
cmd.Connection = con
cmd.CommandText = "INSERT INTO TBL_Torque_Value1 (Serial_Num, Controler_Name, Torque_Status, Torque_Value, Date_Time,Extra_1, Extra_2, Extra_3,RundownMin,RundownMax,RundownAct,RundownStat,AngleMin,AngleMax,AngleFT,AngleStat,TorqueMin,TorqueMax,ToolTightens,Toolserialnum) VALUES(#p1,#p2, #p3, #p4, #p5, #p6, #p7, #p8,#p9, #p10, #p11, #p12, #p13, #p14, #p15, #p16, #p17, #p18, #p19, #p20)"
cmd.Parameters.Add("#p1", SqlDbType.NVarChar, 50)
cmd.Parameters.Add("#p2", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p3", SqlDbType.NVarChar, 50)
cmd.Parameters.Add("#p4", SqlDbType.NVarChar, 50)
cmd.Parameters.Add("#p5", SqlDbType.DateTime2, 7)
cmd.Parameters.Add("#p6", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p7", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p8", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p9", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p10", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p11", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p12", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p13", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p14", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p15", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p16", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p17", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p18", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p19", SqlDbType.NVarChar, 250)
cmd.Parameters.Add("#p20", SqlDbType.NVarChar, 250)
cmd.Parameters("#p1").Value = Sdata(s)
cmd.Parameters("#p2").Value = Cname(s)
cmd.Parameters("#p3").Value = Tstatus(s)
cmd.Parameters("#p4").Value = TValue(s)
cmd.Parameters("#p5").Value = Now()
cmd.Parameters("#p6").Value = Tfinal(s)
cmd.Parameters("#p7").Value = TFinalAngle(s) + " Deg"
cmd.Parameters("#p8").Value = "P:" + TPset(s)
cmd.Parameters("#p9").Value = RDAmin(s)
cmd.Parameters("#p10").Value = RDAmax(s)
cmd.Parameters("#p11").Value = RDAactual(s)
cmd.Parameters("#p12").Value = RDAStat(s)
cmd.Parameters("#p13").Value = Anglemin(s)
cmd.Parameters("#p14").Value = Anglemax(s)
cmd.Parameters("#p15").Value = AngleFT(s)
cmd.Parameters("#p16").Value = Anglestat(s)
cmd.Parameters("#p17").Value = Tormin(s)
cmd.Parameters("#p18").Value = Tormax(s)
cmd.Parameters("#p19").Value = TTTights(s)
cmd.Parameters("#p20").Value = TTSerial(s)
cmd.ExecuteNonQuery()
Catch ex As Exception
WriteToErrorLog("Error Inserting Data into The Database In reguards to Torque Data.", ex.Message, "Failed to Insert Torque Data.")
con.Close()
cmd.Parameters.Clear()
Cname(s) = ""
Tstatus(s) = ""
TValue(s) = ""
Sdata(s) = ""
Tfinal(s) = ""
TFinalAngle(s) = ""
TPset(s) = ""
RDAmin(s) = ""
RDAmax(s) = ""
RDAactual(s) = ""
RDAStat(s) = ""
Anglemin(s) = ""
Anglemax(s) = ""
AngleFT(s) = ""
Anglestat(s) = ""
Tormin(s) = ""
Tormax(s) = ""
TTTights(s) = ""
TTSerial(s) = ""
Finally
con.Close()
cmd.Parameters.Clear()
Cname(s) = ""
Tstatus(s) = ""
TValue(s) = ""
Sdata(s) = ""
Tfinal(s) = ""
TFinalAngle(s) = ""
TPset(s) = ""
RDAmin(s) = ""
RDAmax(s) = ""
RDAactual(s) = ""
RDAStat(s) = ""
Anglemin(s) = ""
Anglemax(s) = ""
AngleFT(s) = ""
Anglestat(s) = ""
Tormin(s) = ""
Tormax(s) = ""
TTTights(s) = ""
TTSerial(s) = ""
End Try
End If
End Try
End If
Else
dict(t).AutoSize = True
dict(t).Text = "Torque Box is not active :: " + TBData(s) + " ::"
dict(t).BackColor = System.Drawing.Color.Black
dict(t).ForeColor = Color.White
End If
End Sub
The class that is being referenced is one that I created and is working but like I said everything is slow. It seems to hang for 3 to 5 seconds in a single tick event.
As of now I only have 21 tools setup and it will take about 15 to 30 seconds to cycle through all.
Related
How do I insert millions of records with speed and at once into an sql table using vb.net?
I have am filling gridview with data and insert record 1 by 1 into an sql table using a stored procedure which has only insert statement. This is ok but when records are in millions then this takes a considerable time. I want to insert in speed into the table and should not take much time. Try con.ConnectionString = v_ObjConn Dim ParamName(8), ParamType(8), ParamValue(8) As String ParamName(0) = "#WOCODE" : ParamType(0) = SqlDbType.VarChar ParamName(1) = "#WODESC" : ParamType(1) = SqlDbType.VarChar ParamName(2) = "#WOTYPE" : ParamType(2) = SqlDbType.VarChar ParamName(3) = "#TAGNUMBER" : ParamType(3) = SqlDbType.VarChar ParamName(4) = "#PMCODE" : ParamType(4) = SqlDbType.VarChar ParamName(5) = "#STATUS" : ParamType(5) = SqlDbType.VarChar ParamName(6) = "#COMPLETEDDATE" : ParamType(6) = SqlDbType.Date ParamName(7) = "#LASTUPDATE" : ParamType(7) = SqlDbType.Date lblWaitingMsg.Text = "Importing records into the VAIL-Plant. Please wait..." For Each row As GridViewRow In gv_InforWO.Rows Dim chkBoxSelect As CheckBox = CType(row.FindControl("chkSelect"), CheckBox) If chkBoxSelect.Checked = True Then ParamValue(0) = row.Cells(1).Text.ToString().Replace("&", "and").Replace(" ", String.Empty) ParamValue(1) = row.Cells(2).Text.ToString().Replace("&", "and").Replace(" ", String.Empty) ParamValue(2) = row.Cells(3).Text.ToString().Replace("&", "and").Replace(" ", String.Empty) ParamValue(3) = row.Cells(4).Text.ToString().Replace("&", "and").Replace(" ", String.Empty) ParamValue(4) = row.Cells(5).Text.ToString().Replace("&", "and").Replace(" ", String.Empty) ParamValue(5) = row.Cells(6).Text.ToString().Replace("&", "and").Replace(" ", String.Empty) ParamValue(6) = Convert.ToDateTime(row.Cells(7).Text) ParamValue(7) = Convert.ToDateTime(row.Cells(8).Text) Func.SP_ExecDML(con, "[dbo].[SP_InsertWorkOrders_InforEAM]", ParamName, ParamType, ParamValue) End If Next MsgBox("Records have been imported/updated.") BindGridInfoWO() Catch ex As Exception MsgBox(ex.Message) Finally lblWaitingMsg.Text = "" End Try
how to get picture from database to picture box by using textbox lost focus
Private Sub tunjukrekod() Dim cn As MySqlConnection = New MySqlConnection() cn.ConnectionString = ("server=localhost; userid=root; password=; database=payrollsystemdb;") cn.Open() cmd.Connection = cn Try If TextBoxEmployeeID.Text <> "" Then dt.Clear() cmd = New MySqlCommand("select * from employeedetail where EmployeeID='" & TextBoxEmployeeID.Text & "'", cn) da = New MySqlDataAdapter(cmd) da.Fill(dt) TextBoxEmployeeID.Text = dt.Rows(0).Item(0) TextBoxEmployeeName.Text = dt.Rows(0).Item(1) TextBoxChineseName.Text = dt.Rows(0).Item(2) If dt.Rows(0).Item(3) = "Active" Then RadioButtonActiveStatus.Checked = True ElseIf dt.Rows(0).Item(3) = "Inactive" Then RadioButtonInactiveStatus.Checked = True End If TextBoxbranchID.Text = dt.Rows(0).Item(4) TextBoxAccessLevel.Text = dt.Rows(0).Item(5) RichTextBoxAddress.Text = dt.Rows(0).Item(6) TextBoxTel1.Text = dt.Rows(0).Item(7) TextBoxTel2.Text = dt.Rows(0).Item(8) TextBoxMobile.Text = dt.Rows(0).Item(9) TextBoxEmail.Text = dt.Rows(0).Item(10) TextBoxICNew.Text = dt.Rows(0).Item(11) TextBoxICOld.Text = dt.Rows(0).Item(12) TextBoxPassport.Text = dt.Rows(0).Item(13) DateTimePickerpassportexpire.Value = dt.Rows(0).Item(14) TextBoxPermit.Text = dt.Rows(0).Item(15) DateTimePickerpermitexpire.Value = dt.Rows(0).Item(16) DateTimePickerBirthDate.Value = dt.Rows(0).Item(17) TextBoxreligionPD.Text = dt.Rows(0).Item(18) TextBoxAge.Text = dt.Rows(0).Item(19) TextBoxracePD.Text = dt.Rows(0).Item(20) TextBoxcitizenshipPD.Text = dt.Rows(0).Item(21) TextBoxsexPD.Text = dt.Rows(0).Item(22) TextBoxmaritalPD.Text = dt.Rows(0).Item(23) If dt.Rows(0).Item(24) = "yes" Then RadioButtonyesC.Checked = True ElseIf dt.Rows(0).Item(24) = "No" Then RadioButtonnoC.Checked = True End If If dt.Rows(0).Item(25) = "yes" Then RadioButtonYesEOT.Checked = True ElseIf dt.Rows(0).Item(25) = "No" Then RadioButtonnoEOT.Checked = True End If TextBoxNameSpouse.Text = dt.Rows(0).Item(26) TextBoxICNewSpouse.Text = dt.Rows(0).Item(27) TextBoxICOldSpouse.Text = dt.Rows(0).Item(28) RichTextBoxAddressSpouse.Text = dt.Rows(0).Item(29) TextBoxIncomeSpouse.Text = dt.Rows(0).Item(30) TextBoxBranchSpouse.Text = dt.Rows(0).Item(31) If dt.Rows(0).Item(32) = "yes" Then RadioButtonyesworking.Checked = True ElseIf dt.Rows(0).Item(32) = "No" Then RadioButtonNoworking.Checked = True End If TextBoxChildrenSpouse.Text = dt.Rows(0).Item(33) If dt.Rows(0).Item(34) = "Auto" Then RadioButtonAutoAuMaSpouse.Checked = True ElseIf dt.Rows(0).Item(34) = "Manual" Then RadioButtonManualAuMaSpouse.Checked = True End If TextBoxpositionED.Text = dt.Rows(0).Item(35) TextBoxdepartmentED.Text = dt.Rows(0).Item(36) TextBoxdivisionED.Text = dt.Rows(0).Item(37) TextBoxsectionED.Text = dt.Rows(0).Item(38) TextBoxlocationED.Text = dt.Rows(0).Item(39) TextBoxgradeED.Text = dt.Rows(0).Item(40) TextBoxcategoryED.Text = dt.Rows(0).Item(41) TextBoxworkgroupED.Text = dt.Rows(0).Item(42) TextBoxformularateED.Text = dt.Rows(0).Item(43) DateTimePickerjoindateED.Value = dt.Rows(0).Item(44) DateTimePickerconfirmdateED.Value = dt.Rows(0).Item(45) DateTimePickerresigneddateED.Value = dt.Rows(0).Item(46) TextBoxacbankED.Text = dt.Rows(0).Item(47) If dt.Rows(0).Item(48) = "IC New" Then RadioButtonICNewACBank.Checked = True ElseIf dt.Rows(0).Item(48) = "IC Old" Then RadioButtonICOldACBank.Checked = True ElseIf dt.Rows(0).Item(48) = "Passport No" Then RadioButtonPassportNoACBank.Checked = True ElseIf dt.Rows(0).Item(48) = "Permit No" Then RadioButtonPermitNoACBank.Checked = True End If TextBoxACNoED.Text = dt.Rows(0).Item(49) TextBoxHRDFundED.Text = dt.Rows(0).Item(50) If dt.Rows(0).Item(51) = "IC New" Then RadioButtonICNewHRDFund.Checked = True ElseIf dt.Rows(0).Item(51) = "IC Old" Then RadioButtonICOldHRDFund.Checked = True ElseIf dt.Rows(0).Item(51) = "Passport No" Then RadioButtonPassportNoHRDFund.Checked = True ElseIf dt.Rows(0).Item(51) = "Permit No" Then RadioButtonPermitNoHRDFund.Checked = True End If TextBoxProbationED.Text = dt.Rows(0).Item(52) TextBoxSalaryED.Text = dt.Rows(0).Item(53) TextBoxNoticeResignED.Text = dt.Rows(0).Item(54) TextBoxEmployerNamePE.Text = dt.Rows(0).Item(55) RichTextBoxAddressPE.Text = dt.Rows(0).Item(56) TextBoxTelNo1PE.Text = dt.Rows(0).Item(57) TextBoxTelNo2PE.Text = dt.Rows(0).Item(58) TextBoxFaxPE.Text = dt.Rows(0).Item(59) TextBoxPICPE.Text = dt.Rows(0).Item(60) TextBoxPositionPE.Text = dt.Rows(0).Item(61) DateTimePickerdatejoinPE.Value = dt.Rows(0).Item(62) TextBoxSalaryPE.Text = dt.Rows(0).Item(63) DateTimePickerdateresignPE.Value = dt.Rows(0).Item(64) TextBoxReasonPE.Text = dt.Rows(0).Item(65) TextBoxEPFNoGD.Text = dt.Rows(0).Item(66) If dt.Rows(0).Item(67) = "IC New" Then RadioButtonICNewICTypeEPFGD.Checked = True ElseIf dt.Rows(0).Item(67) = "IC Old" Then RadioButtonICOldICTypeEPFGD.Checked = True ElseIf dt.Rows(0).Item(67) = "Passport No" Then RadioButtonPassportNoICTypeEPFGD.Checked = True ElseIf dt.Rows(0).Item(67) = "Permit No" Then RadioButtonPermitNoICTypeEPFGD.Checked = True End If TextBoxInitialGD.Text = dt.Rows(0).Item(68) TextBoxNKGD.Text = dt.Rows(0).Item(69) TextBoxepftableGD.Text = dt.Rows(0).Item(70) TextBoxkwspGD.Text = dt.Rows(0).Item(71) TextBoxIncomeTaxGD.Text = dt.Rows(0).Item(72) If dt.Rows(0).Item(73) = "IC New" Then RadioButtonICNewICTypeIncomeGD.Checked = True ElseIf dt.Rows(0).Item(73) = "IC Old" Then RadioButtonICOldICTypeIncomeGD.Checked = True ElseIf dt.Rows(0).Item(73) = "Passport No" Then RadioButtonPassportNoICTypeIncomeGD.Checked = True ElseIf dt.Rows(0).Item(73) = "Permit No" Then RadioButtonPermitNoICTypeIncomeGD.Checked = True End If TextBoxbranchincomeGD.Text = dt.Rows(0).Item(74) TextBoxpcbcodeGD.Text = dt.Rows(0).Item(75) TextBoxincometaxdeptGD.Text = dt.Rows(0).Item(76) TextBoxSocsoNoGD.Text = dt.Rows(0).Item(77) If dt.Rows(0).Item(78) = "IC New" Then RadioButtonICNewICTypeSocsoGD.Checked = True ElseIf dt.Rows(0).Item(78) = "IC Old" Then RadioButtonICOldICTypeSocsoGD.Checked = True ElseIf dt.Rows(0).Item(78) = "Passport No" Then RadioButtonPassportNoICTypeSocsoGD.Checked = True ElseIf dt.Rows(0).Item(78) = "Permit No" Then RadioButtonPermitNoICTypeSocsoGD.Checked = True End If TextBoxBranchSocsoGD.Text = dt.Rows(0).Item(79) TextBoxSocsoOfficeGD.Text = dt.Rows(0).Item(80) TextBoxsocsotypeGD.Text = dt.Rows(0).Item(81) TextBoxboardofsocsoGD.Text = dt.Rows(0).Item(82) TextBoxTHAccGD.Text = dt.Rows(0).Item(83) If dt.Rows(0).Item(84) = "IC New" Then RadioButtonICNewICTypeTHGD.Checked = True ElseIf dt.Rows(0).Item(84) = "IC Old" Then RadioButtonICOldICTypeTHGD.Checked = True ElseIf dt.Rows(0).Item(84) = "Passport No" Then RadioButtonPassportNoICTypeTHGD.Checked = True ElseIf dt.Rows(0).Item(84) = "Permit No" Then RadioButtonPermitNoICTypeTHGD.Checked = True End If TextBoxthcGD.Text = dt.Rows(0).Item(85) 'Dim ms As New MemoryStream(changephoto(CInt(khaiEDForm2.DataGridViewfind.SelectedCells(0).Value))) 'PictureBox1.Image = Image.FromStream(ms) cmd = New MySqlCommand("select * from salarydetail", cn) da.SelectCommand = cmd da.Fill(dtsalary) End If Catch ex As Exception 'TextBoxEmployeeName.Focus() End Try End Sub 'Function changephoto(ByVal photo As Integer) As Byte() ' Dim cn As MySqlConnection = New MySqlConnection() ' cn.ConnectionString = ("server=localhost; userid=root; password=; database=payrollsystemdb;") ' cn.Open() ' '.CommandText = System.Data.CommandType.Text ' With cmd ' .Connection = cn ' .CommandText = "SELECT Imageblob FROM employeedetail WHERE EmployeeID=" & khaiEDForm2.DataGridViewfind.SelectedRows(0).Cells(0).Value ' End With ' Dim myphoto() As Byte = CType(cmd.ExecuteScalar(), Byte()) ' cn.Close() ' Return myphoto 'End Function Private Sub TextBoxEmployeeID_LostFocus(sender As Object, e As EventArgs) Handles TextBoxEmployeeID.LostFocus If TextBoxEmployeeID.Text = "" Then TextBoxEmployeeID.Select() Else tunjukrekod() tunjukdgv() End If addrow() End Sub How I Can Rewrite the code? because the code cam retrive picture only when from form2 to form1. I used visual studio express 2014, MySQL Database using PHPMYADMIN, MySQLConnection.
ok . i got the solution ! finally ! dr = cmd.ExecuteReader() If (dr.HasRows) Then While (dr.Read()) With Me 'fetch image from database Dim imgBytes() As Byte = dr("Imageblob") 'image field Dim image As Bitmap = New Bitmap(New System.IO.MemoryStream(imgBytes)) 'convert binary to image .PictureBox1.Image = image 'show picture to picture box End With End While Else MsgBox("No records Found!") End If
commandtext property has not been initialized vb.net
I am new to vb.net and tried to execute the code its working fine but when I am scheduling the code in another server in network by running the exe file only, then I am getting the error as: "commandtext property has not been initialized" Sub send_SMS() Console.WriteLine("Begining of the send_SMS() ") Dim dt As New DataTable Dim st1, sql As String Dim fetcheduser, fetchedpno As String Dim J As Integer J = Now.Hour Console.WriteLine("J Now.Hour =: " + J.ToString) 'A shift If J >= 14 And J < 22 Then sql = " SELECT * FROM YKPI_VALUE " sql = sql & " WHERE KPV_USER_ID='QEXP' " sql = sql & " AND KPV_TYP_ID='A' " sql = sql & " AND KPV_FROM_DATE=TO_CHAR(SYSDATE,'YYYYMMDD') " Console.WriteLine("J = 14 ") st.Text = "A" End If 'B Shift If J >= 22 And J < 6 Then sql = " SELECT * FROM YKPI_VALUE " sql = sql & " WHERE KPV_USER_ID='QEXP' " sql = sql & " AND KPV_TYP_ID='B' " sql = sql & " AND KPV_FROM_DATE=TO_CHAR(SYSDATE,'YYYYMMDD') " Console.WriteLine("J = 22 ") st.Text = "B" End If 'C Shift If J >= 6 And J < 14 Then sql = " SELECT * FROM YKPI_VALUE " sql = sql & " WHERE KPV_USER_ID='QEXP' " sql = sql & " AND KPV_TYP_ID='C' " sql = sql & " AND KPV_FROM_DATE=TO_CHAR(SYSDATE-1,'YYYYMMDD') " Console.WriteLine("J = 6 ") st.Text = "C" DAT = DAT.AddDays(-1) End If Dim DA As New OracleDataAdapter(sql, oraconn) DA.Fill(dt) Console.WriteLine("Before dt.Rows count ") Dim MaxRows, MaxColums, inc As Integer MaxRows = dt.Rows.Count MaxColums = dt.Columns.Count Dim multiarray(,) As String = New String(MaxRows, MaxColums) {} Console.WriteLine("Value of MaxRows = " + MaxRows.ToString) Console.WriteLine("Value of MaxColums = " + MaxColums.ToString) If (inc <> MaxRows) Then 'inc = inc + 1 Console.WriteLine("Inside dt.Rows and Before for loop ") For inc = 0 To MaxRows - 1 'For col = 0 To MaxColums dt.Rows(inc).Item(10) = dt.Rows(inc).Item(10).ToString.Replace("Q", "") multiarray(inc, 1) = dt.Rows(inc).Item(2).ToString() multiarray(inc, 2) = dt.Rows(inc).Item(4).ToString() multiarray(inc, 3) = dt.Rows(inc).Item(10).ToString() Next End If Dim queryusr As String queryusr = "" Dim sql_CMD_TD As New OracleCommand(sql, oraconn) If Not oraconn.State = ConnectionState.Open Then oraconn.Open() End If Dim doNotSendSMS = False Dim sqldr As OracleDataReader = sql_CMD_TD.ExecuteReader() If sqldr.HasRows Then oraconn.Close() queryusr = " SELECT TSU_USER,TSU_USERNAME FROM T_SDM_USERS " queryusr = queryusr & "WHERE TSU_SCREENID='QESMS'AND TSU_VALIDITY='Y' " dt = New DataTable DA = New OracleDataAdapter(queryusr, oraconn) DA.Fill(dt) If Not doNotSendSMS Then Dim ora_CMD_SMS As New OracleCommand(queryusr, oraconn) If oraconn.State = ConnectionState.Closed Then oraconn.Open() End If st1 = st.Text Dim ORA_DR As OracleDataReader = ora_CMD_SMS.ExecuteReader() If ORA_DR.HasRows Then While ORA_DR.Read() fetcheduser = ORA_DR("TSU_USERNAME") fetchedpno = ORA_DR("TSU_USER") Console.WriteLine("Before insertIntoSMS function call ") Console.WriteLine(" Value of st1 :" + st1.ToString) insertIntoSMS_hbf(fetcheduser, fetchedpno, st1, multiarray, MaxRows, MaxColums) Console.WriteLine("Outside of insertIntoSMS function call ") End While ORA_DR.Close() End If If oraconn.State = ConnectionState.Open Then oraconn.Close() End If End If End If End Sub
Code Efficiency: Iterations and Queries
The code below does a few things: Iterates through a colleciton of labels I have on my Windows form, used as a placeholder While iterating through the collection, the code is connecting to an SQL database to return a result from a query for each label (about 104 labels) Finally some charts are populates. I have timed this whole process and it takes about 4 or 5 seconds. My goal is to have this process performed instantly or 1 seconds or less. Could an expert out there explain to me what I'm doing wrong and why this process takes so long? here is the query: Dim RESULT1 As Decimal 'declare this as global Dim RESULT2 As Decimal 'declare this as global Private Sub Week(ByVal week As Integer) Dim queryString As String = "SELECT " & _ " (SELECT CAST(SUM(TARGET_SECONDS) AS DECIMAL)/ CAST(SUM(ROUTE_SECONDS) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN WITH(NOLOCK) WHERE ACTIVE = 1 AND EMPLOYEE_NAME = '" & cbEmployeeName.Text & "') AS RESULT1," & _ " (SELECT (SELECT CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN AS RESULT2 WHERE ACTIVE = 1 AND APE_BUSDRIVER_STATUS_OBJID= 1 AND EMPLOYEE_NAME = '" & cbEmployeeName.Text & "' )/(SELECT CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN AS RESULT2 WHERE ACTIVE = 1 AND EMPLOYEE_NAME = '" & cbEmployeeName.Text & "' )) AS RESULT2" & _ " FROM dbo.APE_BUSDRIVER_MAIN WHERE WEEK_TIME = " & week & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND EMPLOYEE_NAME = '" & cbEmployeeName.Text & "' AND YEAR_TIME = '" & cbYear.Text & "' AND ACTIVE = 1" Using connection As New SqlConnection(SQLConnectionStr) Dim command As New SqlCommand(queryString, connection) connection.Open() Dim reader As SqlDataReader = command.ExecuteReader() ' Call Read before accessing data. If reader.HasRows Then While reader.Read() RESULT1 = reader("RESULT1") RESULT2 = reader("RESULT2") End While Else RESULT1 = 0 RESULT2 = 0 End If ' Call Close when done reading. reader.Close() End Using End Sub Here is the code: Private Sub LoadWeeklyStats() For i As Integer = 0 To 51 Dim LabelWkEff As String = "LblWkEff" + (i + 1).ToString Dim myArray1 As Array = Controls.Find(LabelWkEff, False) Dim myControl1 As Label = myArray1(0) myControl1.Text = RESULT1 'AND Dim LabelDeliveryStat As String = "lblDeliveryStat" + (i + 1).ToString Dim myArray2 As Array = Controls.Find(LabelDeliveryStat, False) Dim myControl2 As Label = myArray2(0) myControl2.Text = RESULT2 'COUNTER Week(i + 1) Next 'TO CLEAR CHART AND RELOAD IT Chart1.Titles.Clear() Chart1.Series.Clear() Chart1.ChartAreas.Clear() Chart1.ChartAreas.Add("AREA") Chart1.Series.Add("WeeklyEfficiency") Chart1.Series.Add("TARGET") Chart1.Titles.Add("ROUTE EFFICIENCY") Chart1.Series("TARGET").ChartType = SeriesChartType.Line With Chart1.Titles(0) .Font = New Font("TAHOMA", 12, FontStyle.Bold) End With With Chart1.ChartAreas(0) '.AxisY.MajorGrid.Enabled = False .AxisX.MajorGrid.Enabled = False .AxisX.Title = "WEEKS" .AxisY.Title = "EFFICIENCY" .AxisX.Minimum = 0 .AxisX.Maximum = 53 .AxisY.Minimum = 0 .AxisX.Interval = 1 .AxisY.LabelStyle.Format = Format(0, "0%") End With With Chart1.Series(0) .Font = New Font(Me.Font.Name, 7, FontStyle.Regular) .SmartLabelStyle.Enabled = False .LabelAngle = -90 .Label = "#VAL{P}" .IsValueShownAsLabel = True .Name = "WeeklyEfficiency" .ChartType = SeriesChartType.Column .LabelToolTip = Enabled .ToolTip = "WEEK #VALX" & vbNewLine & "#VAL{P}" .BorderColor = Color.Black .LabelForeColor = Color.Transparent Dim area As String = cbArea.Text Select Case area Case "BC_PICKUP" .Color = Color.Blue Case "BC_DELIVERY" .Color = Color.Blue Case "RAW" .Color = Color.LimeGreen Case "RTV" .Color = Color.Yellow Case Else .Color = Color.Black End Select 'LOAD DATA POINTS With .Points .AddXY(0, 0) .AddXY(1, LblWkEff1.Text) .AddXY(2, LblWkEff2.Text) .AddXY(3, LblWkEff3.Text) .AddXY(4, LblWkEff4.Text) .AddXY(5, LblWkEff5.Text) .AddXY(6, LblWkEff6.Text) .AddXY(7, LblWkEff7.Text) .AddXY(8, LblWkEff8.Text) .AddXY(9, LblWkEff9.Text) .AddXY(10, LblWkEff10.Text) .AddXY(11, LblWkEff11.Text) .AddXY(12, LblWkEff12.Text) .AddXY(13, LblWkEff13.Text) .AddXY(14, LblWkEff14.Text) .AddXY(15, LblWkEff15.Text) .AddXY(16, LblWkEff16.Text) .AddXY(17, LblWkEff17.Text) .AddXY(18, LblWkEff18.Text) .AddXY(19, LblWkEff19.Text) .AddXY(20, LblWkEff20.Text) .AddXY(21, LblWkEff21.Text) .AddXY(22, LblWkEff22.Text) .AddXY(23, LblWkEff23.Text) .AddXY(24, LblWkEff24.Text) .AddXY(25, LblWkEff25.Text) .AddXY(26, LblWkEff26.Text) .AddXY(27, LblWkEff27.Text) .AddXY(28, LblWkEff28.Text) .AddXY(29, LblWkEff29.Text) .AddXY(30, LblWkEff30.Text) .AddXY(31, LblWkEff33.Text) .AddXY(32, LblWkEff32.Text) .AddXY(33, LblWkEff33.Text) .AddXY(34, LblWkEff34.Text) .AddXY(35, LblWkEff35.Text) .AddXY(36, LblWkEff36.Text) .AddXY(37, LblWkEff37.Text) .AddXY(38, LblWkEff38.Text) .AddXY(39, LblWkEff39.Text) .AddXY(40, LblWkEff40.Text) .AddXY(41, LblWkEff41.Text) .AddXY(42, LblWkEff42.Text) .AddXY(43, LblWkEff43.Text) .AddXY(44, LblWkEff44.Text) .AddXY(45, LblWkEff45.Text) .AddXY(46, LblWkEff46.Text) .AddXY(47, LblWkEff47.Text) .AddXY(48, LblWkEff48.Text) .AddXY(49, LblWkEff49.Text) .AddXY(50, LblWkEff50.Text) .AddXY(51, LblWkEff51.Text) .AddXY(52, LblWkEff52.Text) .AddXY(53, 0) End With End With With Chart1.Series("TARGET") .Name = "TARGET" .ChartType = SeriesChartType.Line .Color = Color.Red .BorderWidth = 3 With .Points .AddXY(0, 1) .AddXY(1, 1) .AddXY(2, 1) .AddXY(3, 1) .AddXY(4, 1) .AddXY(5, 1) .AddXY(6, 1) .AddXY(7, 1) .AddXY(8, 1) .AddXY(9, 1) .AddXY(10, 1) .AddXY(11, 1) .AddXY(12, 1) .AddXY(13, 1) .AddXY(14, 1) .AddXY(15, 1) .AddXY(16, 1) .AddXY(17, 1) .AddXY(18, 1) .AddXY(19, 1) .AddXY(20, 1) .AddXY(21, 1) .AddXY(22, 1) .AddXY(23, 1) .AddXY(24, 1) .AddXY(25, 1) .AddXY(26, 1) .AddXY(27, 1) .AddXY(28, 1) .AddXY(29, 1) .AddXY(30, 1) .AddXY(31, 1) .AddXY(32, 1) .AddXY(33, 1) .AddXY(34, 1) .AddXY(35, 1) .AddXY(36, 1) .AddXY(37, 1) .AddXY(38, 1) .AddXY(39, 1) .AddXY(40, 1) .AddXY(41, 1) .AddXY(42, 1) .AddXY(43, 1) .AddXY(44, 1) .AddXY(45, 1) .AddXY(46, 1) .AddXY(47, 1) .AddXY(48, 1) .AddXY(49, 1) .AddXY(50, 1) .AddXY(51, 1) .AddXY(52, 1) .AddXY(53, 1) End With End With 'MAKE ONTIME CHART '______________________________________________________________________________() 'TO CLEAR CHART AND RELOAD IT Chart2.Titles.Clear() Chart2.Series.Clear() Chart2.ChartAreas.Clear() Chart2.ChartAreas.Add("AREA") Chart2.Series.Add("WeeklyEfficiency") Chart2.Series.Add("TARGET") Chart2.Titles.Add("ON TIME EFFICIENCY") With Chart2.Titles(0) .Font = New Font("TAHOMA", 12, FontStyle.Bold) End With With Chart2.ChartAreas(0) '.AxisY.MajorGrid.Enabled = False .AxisX.MajorGrid.Enabled = False .AxisX.Title = "WEEKS" .AxisY.Title = "EFFICIENCY" .AxisX.Minimum = 0 .AxisX.Maximum = 53 .AxisY.Minimum = 0 .AxisX.Interval = 1 .AxisY.LabelStyle.Format = Format(0, "0%") End With With Chart2.Series(0) .Font = New Font(Me.Font.Name, 7, FontStyle.Regular) .SmartLabelStyle.Enabled = False .LabelAngle = -90 .Label = "#VAL{P}" .IsValueShownAsLabel = True .Name = "WeeklyEfficiency" .ChartType = SeriesChartType.Column .LabelToolTip = Enabled .ToolTip = "WEEK #VALX" & vbNewLine & "#VAL{P}" .BorderColor = Color.Black .LabelForeColor = Color.Transparent Dim area As String = cbArea.Text Select Case area Case "BC_PICKUP" .Color = Color.Blue Case "BC_DELIVERY" .Color = Color.Blue Case "RAW" .Color = Color.LimeGreen Case "RTV" .Color = Color.Yellow Case Else .Color = Color.Black End Select 'LOAD DATA POINTS .Points.AddXY(0, 0) .Points.AddXY(1, lblDeliveryStat1.Text) .Points.AddXY(2, lblDeliveryStat2.Text) .Points.AddXY(3, lblDeliveryStat3.Text) .Points.AddXY(4, lblDeliveryStat4.Text) .Points.AddXY(5, lblDeliveryStat5.Text) .Points.AddXY(6, lblDeliveryStat6.Text) .Points.AddXY(7, lblDeliveryStat7.Text) .Points.AddXY(8, lblDeliveryStat8.Text) .Points.AddXY(9, lblDeliveryStat9.Text) .Points.AddXY(10, lblDeliveryStat10.Text) .Points.AddXY(11, lblDeliveryStat11.Text) .Points.AddXY(12, lblDeliveryStat12.Text) .Points.AddXY(13, lblDeliveryStat13.Text) .Points.AddXY(14, lblDeliveryStat14.Text) .Points.AddXY(15, lblDeliveryStat15.Text) .Points.AddXY(16, lblDeliveryStat16.Text) .Points.AddXY(17, lblDeliveryStat17.Text) .Points.AddXY(18, lblDeliveryStat18.Text) .Points.AddXY(19, lblDeliveryStat19.Text) .Points.AddXY(20, lblDeliveryStat20.Text) .Points.AddXY(21, lblDeliveryStat21.Text) .Points.AddXY(22, lblDeliveryStat22.Text) .Points.AddXY(23, lblDeliveryStat23.Text) .Points.AddXY(24, lblDeliveryStat24.Text) .Points.AddXY(25, lblDeliveryStat25.Text) .Points.AddXY(26, lblDeliveryStat26.Text) .Points.AddXY(27, lblDeliveryStat27.Text) .Points.AddXY(28, lblDeliveryStat28.Text) .Points.AddXY(29, lblDeliveryStat29.Text) .Points.AddXY(30, lblDeliveryStat30.Text) .Points.AddXY(31, lblDeliveryStat33.Text) .Points.AddXY(32, lblDeliveryStat32.Text) .Points.AddXY(33, lblDeliveryStat33.Text) .Points.AddXY(34, lblDeliveryStat34.Text) .Points.AddXY(35, lblDeliveryStat35.Text) .Points.AddXY(36, lblDeliveryStat36.Text) .Points.AddXY(37, lblDeliveryStat37.Text) .Points.AddXY(38, lblDeliveryStat38.Text) .Points.AddXY(39, lblDeliveryStat39.Text) .Points.AddXY(40, lblDeliveryStat40.Text) .Points.AddXY(41, lblDeliveryStat41.Text) .Points.AddXY(42, lblDeliveryStat42.Text) .Points.AddXY(43, lblDeliveryStat43.Text) .Points.AddXY(44, lblDeliveryStat44.Text) .Points.AddXY(45, lblDeliveryStat45.Text) .Points.AddXY(46, lblDeliveryStat46.Text) .Points.AddXY(47, lblDeliveryStat47.Text) .Points.AddXY(48, lblDeliveryStat48.Text) .Points.AddXY(49, lblDeliveryStat49.Text) .Points.AddXY(50, lblDeliveryStat50.Text) .Points.AddXY(51, lblDeliveryStat51.Text) .Points.AddXY(52, lblDeliveryStat52.Text) .Points.AddXY(53, 0) End With With Chart2.Series("TARGET") .Name = "TARGET" .ChartType = SeriesChartType.Line .Color = Color.Red .BorderWidth = 3 With .Points .AddXY(0, 1) .AddXY(1, 1) .AddXY(2, 1) .AddXY(3, 1) .AddXY(4, 1) .AddXY(5, 1) .AddXY(6, 1) .AddXY(7, 1) .AddXY(8, 1) .AddXY(9, 1) .AddXY(10, 1) .AddXY(11, 1) .AddXY(12, 1) .AddXY(13, 1) .AddXY(14, 1) .AddXY(15, 1) .AddXY(16, 1) .AddXY(17, 1) .AddXY(18, 1) .AddXY(19, 1) .AddXY(20, 1) .AddXY(21, 1) .AddXY(22, 1) .AddXY(23, 1) .AddXY(24, 1) .AddXY(25, 1) .AddXY(26, 1) .AddXY(27, 1) .AddXY(28, 1) .AddXY(29, 1) .AddXY(30, 1) .AddXY(31, 1) .AddXY(32, 1) .AddXY(33, 1) .AddXY(34, 1) .AddXY(35, 1) .AddXY(36, 1) .AddXY(37, 1) .AddXY(38, 1) .AddXY(39, 1) .AddXY(40, 1) .AddXY(41, 1) .AddXY(42, 1) .AddXY(43, 1) .AddXY(44, 1) .AddXY(45, 1) .AddXY(46, 1) .AddXY(47, 1) .AddXY(48, 1) .AddXY(49, 1) .AddXY(50, 1) .AddXY(51, 1) .AddXY(52, 1) .AddXY(53, 1) End With End With End Sub
I had a similar issue with a Caller Id Program I'm developing When the user was bringing back more than a couple of hundred call records it was taking forever My approach was to only query the DB once at the beginning, Then Use linq on the data Set to bring back in the individual pieces of data Ian Private Sub LoadWeeklyStats() 'Get Global DataSource Here For i As Integer = 0 To 51 Dim LabelWkEff As String = "LblWkEff" + (i + 1).ToString Dim myArray1 As Array = Controls.Find(LabelWkEff, False) Dim myControl1 As Label = myArray1(0) myControl1.Text = RESULT1 'AND Dim LabelDeliveryStat As String = "lblDeliveryStat" + (i + 1).ToString Dim myArray2 As Array = Controls.Find(LabelDeliveryStat, False) Dim myControl2 As Label = myArray2(0) myControl2.Text = RESULT2 'COUNTER Week(i + 1) Next
Automatic chart update with new data entry
My chart loads data from a DataGridView. I want to automatically update my chart with new data if new values are inserted into the DataGridView. My chart is bound to table1 and table2 in my DataGridView which gets values from a DataTable. Here is a small portion of the code: Dim myData As New DataTable wcAdapter.SelectCommand = wcCommand wcAdapter.Fill(myData) - Chart1.DataSource = myData Chart1.Series("Series1").ValueMemberX = "table1" Chart1.Series("Series1").ValueMembersY = "table2" Here is the complete code: Try wcconn.Open() Dim wcCommand As New MySqlCommand() ''telesales name ' Dim wcQuery = "SELECT ID, Telesales, SUBSTRING(lastupdatedate, 1, 10) as 'Day', SUBSTRING(lastupdatetime FROM -9 FOR 6) as 'Time' FROM ratingout where Telesales='" & cbTelesales.Text & "' and lastupdatedate= '" & newDate & "' and lastupdatedate is not null and lastupdatetime is not null ORDER BY lastupdatetime ;" ' wcCommand.Connection = wcconn ' wcCommand.CommandText = wcQuery Dim newDate As String newDate = dateWorkCheck.Text newDate = newDate.Replace("/", "-") Dim y, m, d As String y = newDate.Substring(6, 4) m = newDate.Substring(3, 2) d = newDate.Substring(0, 2) newDate = y & "-" & m & "-" & d Dim wcQuery = "SELECT ID, Telesales, lastupdatedate as 'Day', SUBSTRING(lastupdatetime FROM -8 FOR 2) as 'Time' FROM ratingout where Telesales='" & cbTelesales.Text & "' and lastupdatedate= '" & newDate & "' and lastupdatedate is not null and lastupdatetime is not null ORDER BY lastupdatetime ;" wcCommand.Connection = wcconn wcCommand.CommandText = wcQuery Dim wcData As New DataTable wcAdapter.SelectCommand = wcCommand wcAdapter.Fill(wcData) Dim i = 0 If wcData.Rows.Count = 0 Then wcAdapter.Dispose() Try Dim wQuery = "SELECT ID, Telesales, lastupdatedate as 'Day', SUBSTRING(lastupdatetime FROM -8 FOR 2) as 'Time' FROM ratingout where Telesales='" & cbTelesales.Text & "' and lastupdatedate= '" & dateWorkCheck.Text & "' and lastupdatedate is not null and lastupdatetime is not null ORDER BY lastupdatetime ;" wcCommand.Connection = wcconn wcCommand.CommandText = wQuery Dim wData As New DataTable wcAdapter.SelectCommand = wcCommand wcAdapter.Fill(wData) wData.Columns.Add("tt") wData.Columns.Add("num") wcData.Columns.Add("tt") wcData.Columns.Add("num") 'dgvWorkCheck.AutoSizeRowsMode = DataGridViewAutoSizeRowMode.AllCells Dim dr As DataRow For Each dr In wData.Rows If lastV Is Nothing OrElse Not ColumnEqual(lastV, dr("Time")) Then ''check if first value is nothing If lastV = Nothing Then lastV = "00" l = "0" Else dr("tt") = lastV dr("num") = l 'wcData.Tables("ratingout").Rows(I)("ID") = dr("ID") End If ListBox1.Items.Add(lastV & " <--> " & l) lastV = dr("Time") l = 1 ElseIf lastV Is Nothing OrElse ColumnEqual(lastV, dr("Time")) Then l += 1 'Dim series1 As New Series() 'series1.Points.Add(l) End If For I = I To wData.Rows.Count If I <> wData.Rows.Count Then I += 1 If i = wData.Rows.Count Then dr("tt") = lastV dr("num") = l ListBox1.BeginUpdate() ListBox1.Items.Add(dr("Telesales") & " between[" & lastV & " and 17:00, ] <--> " & l & "[ records ]") ListBox1.EndUpdate() End If GoTo n Else MsgBox("last data") End If Next n: Next txtRec.Text = wData.Rows.Count dgvWorkCheck.DataSource = wData ''chart Dim ChartArea2 As ChartArea = New ChartArea() Dim Legend2 As Legend = New Legend() Dim Series2 As Series = New Series() Dim Chart2 = New Chart() Me.Controls.Add(Chart2) ChartArea2.AxisX.LabelStyle.Angle = -90 ChartArea2.AxisX.LabelStyle.Interval = 1 ChartArea2.AxisY.LabelStyle.Angle = -90 ChartArea2.AxisY.LabelStyle.Interval = 5 ChartArea2.Name = "ChartArea2" Chart2.ChartAreas.Add(ChartArea2) Legend2.Name = "Legend2" Chart2.Legends.Add(Legend2) Chart2.Location = New System.Drawing.Point(12, 113) Chart2.Name = "Chart2" Series2.ChartArea = "ChartArea2" Series2.Legend = "Legend2" Series2.Name = "Series2" Chart2.Series.Add(Series2) Chart2.Size = New System.Drawing.Size(1145, 604) Chart2.TabIndex = 0 Chart2.Text = "Chart2" Chart2.Series("Series2").XValueMember = "tt" Chart2.Series("Series2").YValueMembers = "num" Chart2.DataSource = dgvWorkCheck.DataSource Chart2.DataBind() Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Exit Try
since the new data is inserted into a database, you will only need to rebind the gridview to it's source in order to display the new incoming data. You should isolate the code that binds data to your chart in a function and have it called every time a new field gets inserted: Function FillChartWithData() Dim myData As New DataTable wcAdapter.SelectCommand = wcCommand wcAdapter.Fill(myData) ... Chart1.Series("Series1").ValueMemberX = "table1" Chart1.Series("Series1").ValueMembersY = "table2" End Function EDIT I looked at your coded and it seems you're missing the part responsible for inserting new data inside the 'ratingout' table. You should create a function that allows you to insert new data, something along the line of: Dim insertRating = "INSERT INTO ratingout VALUES (#NewTeleSalesName, #NewDate);" Dim insertCmd As New MySqlCommand(insertRating, wcconn) insertCmd.Parameters.Add("#NewTeleSalesName", MySqlDbType.VarChar, 255, "teleSalesName") insertCmd.Parameters.Add("#NewDate", MySqlDbType.Datetime, 8, New DateTime(2010, 8, 5)) insertCmd.ExecuteNonQuery()
In order to update my chart bargraph named CashChart (which was databound to a BindingSource) I had to do the following: To clear the chart information, Clear the bounding source information And then re-assign the bounding source information: for example: CashChart.Series(0).Points.Clear() CashChart.DataSource = "" CashChart.DataSource = ESTADOINSTANTANEOBindingSource Before, only my DataTable was updating, but after these commands, I was able to get the bargraph to update with new values in the table.