Почему мое приложение работает медленно, это какой-то код, чтобы сделать это приложение быстрее? - PullRequest
0 голосов
/ 23 апреля 2019

Я подаю заявку, чтобы определить, является ли значение сетки данных любым в таблице 1, после этого обновить таблицу 2. Заполнение сетки данных - это таблица 2, мой код работает, но для его использования требуется 1 или более минутсделано 1 строка, есть ли какой-нибудь код для ускорения работы моего приложения?

это мой код:

Imports System.Data.OleDb
Imports System.Data.SqlClient

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim sql As String = "select date,npk,nama,masuk,out,h_ot,flag,status from lemburapril"
    Dim dataadapter As New SqlDataAdapter(sql, str)
    str.Open()
    Dim ds As New DataSet()
    dataadapter.Fill(ds, "ds")
    str.Close()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "ds"
    For i = 0 To ds.Tables(0).Rows.Count - 1

        Dim tgl As Date = ds.Tables(0).Rows(i).Item(0).ToString
        Dim npk As String = ds.Tables(0).Rows(i).Item(1).ToString
        Dim nama As String = ds.Tables(0).Rows(i).Item(2).ToString
        Dim masuk As String = ds.Tables(0).Rows(i).Item(3).ToString
        Dim out As String = ds.Tables(0).Rows(i).Item(4).ToString
        Dim h_ot As String = ds.Tables(0).Rows(i).Item(5).ToString
        Dim Flag As String = ds.Tables(0).Rows(i).Item(6).ToString
        Dim status As String = ds.Tables(0).Rows(i).Item(7).ToString
        For Each Rows In DataGridView1.Rows
            Dim sqlup As String = "update lemburapril set status = 'v' where date = any (select date from ABY1904$ where date ='" & tgl & "') and npk = any (select npk from ABY1904$ where npk = '" & npk & "')"
            str.Open()
            COMMANDSQL(sqlup)
            str.Close()
        Next
    Next
End Sub
Public Sub display()
    Dim sql As String = "select date,npk,nama,masuk,out,h_ot,flag,status from lemburapril"
    Dim dataadapter As New SqlDataAdapter(Sql, str)
    str.Open()
    Dim ds As New DataSet()
    dataadapter.Fill(ds, "ds")
    str.Close()
    DataGridView1.DataSource = ds
    DataGridView1.DataMember = "ds"
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    display()
End Sub
End Class

Это мое соединение:

Module koneksi
Dim sqlcom As New SqlCommand
Dim commansql As String

Public str As New SqlConnection("data source= Somebody-PC\SQLEXPRESS ;initial catalog= lembur ;integrated security =true")
Public Sub COMMANDSQL(ByVal S As String)
    sqlcom = New SqlCommand(S, str)
    sqlcom.CommandType = CommandType.Text
    sqlcom.ExecuteNonQuery()
End Sub
End Module

1 Ответ

0 голосов
/ 23 апреля 2019

Избавьтесь от модуля.Держите все свои объекты базы данных локально, чтобы вы могли закрыть и утилизировать их.Использование ... Конец Использование блоков позаботится об этом, даже если есть ошибка.Похоже, что вы просматривали все строки и снова запускали обновление для каждой строки во вложенном файле.Это дает вам n * n, что замедлит ход событий.

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    display()
End Sub

Private ConnString As String = "data source= Somebody-PC\SQLEXPRESS ;initial catalog= lembur ;integrated security =true"

Private dt As New DataTable

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Using Str As New SqlConnection(ConnString)
        Using cmd As New SqlCommand("Update lemburapril Set status = 'v' Where date = any (Select date From ABY1904$ Where date =@tgl) And npk = any (Select npk From ABY1904$ Where npk = @npk)", Str)
            cmd.Parameters.Add("@tgl", SqlDbType.Date)
            cmd.Parameters.Add("@npk", SqlDbType.VarChar)
            Str.Open()
            For i = 0 To dt.Rows.Count - 1
                cmd.Parameters("@tgl").Value = CDate(dt.Rows(i).Item(0))
                cmd.Parameters("@npk").Value = dt.Rows(i).Item(1).ToString
                cmd.ExecuteNonQuery()
            Next
        End Using
    End Using
End Sub
Public Sub display()
    Using Str As New SqlConnection(ConnString)
        Using cmd As New SqlCommand("select date,npk,nama,masuk,[out],h_ot,flag,status from lemburapril", Str)
            Str.Open()
            dt.Load(cmd.ExecuteReader)
        End Using
    End Using
    DataGridView1.DataSource = dt
End Sub
...