Yakup Yasin Ответов: 1

.net 20 таблиц из SQL каждую секунду.


У меня есть серверная машина (sql2008), и мне нужно получать данные из 20 таблиц каждую секунду(table1,table2, ext..)

Используется vs2015 и datagridview, но локальные машины не могут получать данные каждую секунду. (разбился или отстал)

если я использую 1 gridview это работа но мне нужно получить данные из 20 таблиц

как я могу получить 20 таблиц из sql на каждую секунду?

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

интервал таймера=1000
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
       getdata(DataGridView1,table1)
   End Sub

Public Sub getdata(ByVal datagrid As Object, ByVal tableno As string)
       Dim Server As String = "server"
       Dim User As String = "sa"
       Dim Pass As String = "1231231"
       Dim Database As String = "database"


       Dim ay = "; "
       Dim DBConnection As String = ""
       DBConnection = DBConnection & "Provider=SQLOLEDB.1" & ay
       DBConnection = DBConnection & "Data Source=" & Server & ay
       DBConnection = DBConnection & "Initial Catalog=" & Database & ay
       DBConnection = DBConnection & "User ID=" & User & ay
       DBConnection = DBConnection & "Password=" & Pass & ";"

       Dim SQL As String

       SQL = "select * from " & tableno & ""

       Dim Conn As New ADODB.Connection()

       Dim rs As New ADODB.Recordset()

       Dim daTitles As New OleDbDataAdapter()

       Dim dsTitles As New DataSet("test")


       Conn.Open(DBConnection, "", "", -1)

       rs.Open(SQL, DBConnection, CursorTypeEnum.adOpenDynamic, LockTypeEnum.adLockOptimistic)


       daTitles.Fill(dsTitles, rs, "setting")

       datagrid.DataSource = dsTitles.Tables(0)

       rs.ActiveConnection.close()
       rs.ActiveConnection = Nothing

       Conn.Close()
       Conn = Nothing

   End Sub

Richard Deeming

1) ваше заявление должно НИКОГДА подключение к SQL как sa Это учетная запись системного администратора, и она должна использоваться только для задач администрирования. Ваше приложение должно подключаться как пользователь, который имеет только разрешения, необходимые для запуска вашего приложения.

2) Похоже, вы используете ADODB. Это устаревшая технология на основе COM, которая значительно замедлит работу вашего кода. Вы должны использовать ADO.NET[^] вместо.
ADO.NET обзор[^]
ADO.NET примеры кода[^]

Michael_Davies

Согласно списку Ричарда с:

3. вы устанавливаете соединение, открываете execute и закрываете соединение для каждой таблицы. Вы сэкономите время, если откроете загруженный каждый стол, а затем закроете. Но так как вам нужны данные каждую секунду, откройте соединение на время действия вашей программы.

Yakup Yasin

я попробовал ado.net тоже. Но ничего не изменилось. Ty

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Ваше "требование" смехотворно.

Вы либо сгенерируете 20 SQL-запросов, чтобы получить нужные вам данные, либо сгенерируете как минимум 1 запрос с кучей соединений/союзов и должны будете проанализировать возвращаемый результат в пригодную для использования форму в вашем приложении. Это не учитывает ни размер каждой записи, ни количество записей.

Конечно, вы можете выполнить 20 запросов в секунду, которые на самом деле ничего не возвращают, но вы оставляете без внимания объем возвращаемых данных и обработку, необходимую с вашей стороны для отображения данных.

Вы не можете гарантировать 1-секундный поворот для всех этих запросов. SQL-сервер может быть занят другими делами, и/или ваш клиентский код будет занят обработкой возвращаемых данных, привязкой их к соответствующим сеткам и обработкой событий мыши и клавиатуры пользователя и их требований к обработке.