Muhammad Asim Mughal Ответов: 2

Скорость извлечения данных слишком низкая в VB.NET с помощью SQL server


Привет Я работаю в VB.NET 2015 с SQL Server 2014
У меня есть хранимая процедура, которая извлекает огромные данные.

Проблема в том, что когда я выполняю эту хранимую процедуру непосредственно в новом редакторе запросов sql server 2014, она загружает записи всего за 1 секунду, в то время как полученные данные содержат более 3000 записей.

но когда я вызываю ту же самую хранимую процедуру в своем приложении для загрузки данных в представление таблицы данных, то это занимает 1 минуту, что означает в 60 раз медленнее, чем прямое выполнение в sql server.

я не знаю, что не так в моем коде

Что я уже пробовал:

Вот моя строка подключения
Data Source =192.168.0.203; Initial Catalog=SunTube_ERP; User ID=sa; Password=SunTube@2016; Connect Timeout=0


Код для извлечения данных в сетку выглядит следующим образом:

SQL_Connection.Open()

        MyQuery = "Execute sp_GL " & RecordNoCompany & ", " & OpeningBalance_ & ", '" & Format(DateF, "yyyy-MM-dd HH:mm:ss") & "', '" & Format(DateT, "yyyy-MM-dd HH:mm:ss") & "','" & AcCode & "', '" & Company_Name & "', '" & Company_Addres & "'"

        Dim MyDataAdapter As New SqlDataAdapter()

        MyDataAdapter.SelectCommand = New SqlCommand(MyQuery, SQL_Connection)

        MyDataSet = New System.Data.DataSet

        MyDataAdapter.Fill(MyDataSet)

        grdGeneralLedger.DataSource = MyDataSet.Tables(0)

        SQL_Connection.Close()


Пожалуйста, скажите мне, где я ошибся.

спасибо

С уважением:
Асим

CHill60

Я настоятельно рекомендую вам отредактировать свой пост и удалить пароль из строки подключения. Вы также не должны использовать sa идентификатор пользователя.

Ваш код также уязвим для атаки SQL-инъекций - не объединяйте строки для создания запроса, вместо этого используйте параметризованные запросы

2 Ответов

Рейтинг:
2

RickZeeland

Вы можете попытаться ограничить количество записей, извлеченных изначально для DataGridView с помощью Virtual Mode, смотрите здесь для примера: Пошаговое руководство: реализация виртуального режима в элементе управления Windows Forms DataGridView[^]
Также DataSet это не самый быстрый способ загрузки записей, Если вам нужен только доступ только для чтения, то лучше использовать DataReader, смотрите здесь для примера: Получение данных с помощью DataReader[^]


Рейтинг:
0

OriginalGriff

Просто: не пытайтесь загрузить 3000 + строк в пользовательский элемент управления дисплеем.

Подумайте об этом с точки зрения пользователя: сколько времени ему потребуется, чтобы найти интересующую его информацию? Секунды или минуты? Сколько людей просто решат сбросить ваше приложение, потому что оно не стоит того, чтобы его использовать?
Но не просто сбрасывайте все это на дисплей и ожидайте, что 1) это будет быстро, и 2) это будет полезно или популярно среди пользователей - это просто лениво, и мои пользователи подумают, что это очень грубо, и я получу несколько очень неприятных звонков и сообщений...