katkot_rewsh Ответов: 2

Найти последнее значение в базе данных Access


у меня есть tabel1 в базе данных Access, и мне нужно прочитать Field1 из нее
но мне не нужно было читать все строки Fiedld1
мне нужно прочитать только номер последней строки в этом файле

Поле 1 содержит такие числа, как
001
002
003
004

и мне нужно прочитать только последнее число ведьмы в данном случае это 004 в качестве примера
как я могу это сделать в dr.Читать ???

Dim Cmd As New OleDbCommand 'cmd as command to use
        Cmd.Connection = conn 'open connection to database
        Cmd.CommandText = "select * from Table1
        conn.Open() 'open connection
        dr = Cmd.ExecuteReader 'start to read from database
        While dr.Read

            Textbox1.text = dr("Field1").ToString()

        End While
        dr.Close()
        conn.Close()


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

<pre>Dim Cmd As New OleDbCommand 'cmd as command to use
        Cmd.Connection = conn 'open connection to database
        Cmd.CommandText = "select * from Table1
        conn.Open() 'open connection
        dr = Cmd.ExecuteReader 'start to read from database
        While dr.Read

            Textbox1.text = dr("Field1").ToString()

        End While
        dr.Close()
        conn.Close()

0x01AA

Подумайте/попробуйте что-нибудь вроде SELECT MAX(Field1) FROM Table1
Имейте в виду, что это обычно очень деликатно для полей типа CHAR (x)

Maciej Los

Это не означает, что последнее значение ;)

0x01AA

В принципе, вы правы, но я думаю/предполагаю, что это то, что ищет ОП ;)

Richard MacCutchan

Какой результат вы видите, когда запускаете этот код?

Maciej Los

Нет никакого "последнего значения"! Если объект datatable имеет первичный ключ, индексы и внешние ключи, то 004 значение, которое не связано с первичным ключом, не должно быть последним.
Вы должны предоставить схему таблицы и более подробную информацию о том, как вы создаете такую ценность.

katkot_rewsh

Эти числа добавляются в базу данных с помощью функции из VB
Это значение начинается с 00 затем я увеличиваю 1 до 01 и так далее

Но каждый раз мне нужно смотреть на этот файл в базе данных и знать последнее число ведьмы я не знаю раньше потому что каждый раз это инкремент

Итак, есть ли предложение узнать последний номер, обычно находящийся в этом файле ?

2 Ответов

Рейтинг:
6

katkot_rewsh

Я нашел решение

Cmd.CommandText = "select MAX (ID) from Drums where DrumType = '" & ComboBox7.SelectedItem & "' and Flange = " & YY & "" 'select data from table
        conn.Open() 'open connection

        Label54.Text = Cmd.ExecuteScalar

        dr.Close()
        conn.Close()


MadMyche

! Вы только что создали SQL Injection Vulnerability !

Я обновлю свой ответ правильным способом сделать это

Рейтинг:
14

MadMyche

MS Access, как и SQL Server, имеет MAX[^] функция, которая возвращает максимальное значение, найденное в поле.
Поскольку обновленный запрос вернет только одно значение, вы можете использовать ExecuteScalar() метод и пропустить с помощью DataReader.

Dim Cmd As New OleDbCommand
	Cmd.Connection = conn
	Cmd.CommandText = "SELECT Max(Field1) FROM Table1"
	conn.Open()

'	dr = Cmd.ExecuteReader 'start to read from database
'	While dr.Read
'		Textbox1.text = dr("Field1").ToString()
'	End While
'	dr.Close()

	Textbox1.text = Cmd.ExecuteScalar().ToString()

	conn.Close()
Cmd.Dispose()
Рекомендации:
Минимальные и максимальные функции (Microsoft Access SQL) | Microsoft Docs[^]
Объект oledbcommand.Метод ExecuteScalar (System.Data.OleDb) | Microsoft Docs[^]

Обновление
Чтобы избежать SQL-инъекции, никогда не следует создавать запрос из конкатенации команд и переменных. Правильный способ добавления переменных в команду-это использование Parameter[^] коллекция объекта команды.

Вот обновленный фрагмент кода для вас с добавлением ваших переменных
Cmd.CommandText = "SELECT Max(ID) FROM Drums WHERE DrumType = @DrumType AND Flange = @Flange"
Cmd.Parameters.AddWithValue("@DrumType", ComboBox7.SelectedItem)
Cmd.Parameters.AddWithValue("@Flange", YY)

conn.Open()
Добавлена Ссылка:
Коллекции Sqlparametercollection Класса (Система.Данных.В Sqlclient) | Майкрософт Документы[^]


katkot_rewsh

Отлично, и большое спасибо