Fiínek Cahů Ответов: 1

Как я могу отредактировать ADODB в SQL-запрос?


Привет, как я могу отредактировать этот код для sql-запроса? Спасибо

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

<pre>Dim re2 As New ADODB.Recordset

re1 = cnn.Execute("SELECT TabVyrCS.Mnozstvi From TabVyrCS LEFT OUTER JOIN TabKmenZbozi VKmenStavVC ON VKmenStavVC.ID=(SELECT TabStavSkladu.IDKmenZbozi FROM TabStavSkladu WHERE TabStavSkladu.ID=TabVyrCS.IDStavSkladu) LEFT OUTER JOIN TabVyrCS_EXT WITH(NOLOCK) ON TabVyrCS_EXT.ID=TabVyrCS.ID WHERE TabVyrCS.Nazev1 = '" & TextBox1.Text & "'")

ZurdoDev

Как вы можете его редактировать? Просто начните печатать. В чем проблема?

Dave Kreskowiak

Э-э-э ... что?

Вам придется немного подробнее рассказать о том, что вы пытаетесь сделать.

Fiínek Cahů

Я пытаюсь выбрать TabVyrCS.Mnozstvi в соответствии с TabVyrCS.Nazev1, который находится в textbox1. Я пытаюсь отредактировать его в этот код, но не функционирую сам.

Public Sub kontrola_kusu() Handles Button1.Click
        'VÝBĚR Z TABULKY STROJE SLOUPEC EVIDENČNÍ ČÍSLO STROJE
        Dim COMMAND As String = "SELECT * FROM TabVyrCS LEFT OUTER JOIN TabKmenZbozi VKmenStavVC ON VKmenStavVC.ID=(SELECT TabStavSkladu.IDKmenZbozi FROM TabStavSkladu WHERE TabStavSkladu.ID=TabVyrCS.IDStavSkladu) LEFT OUTER JOIN TabVyrCS_EXT WITH(NOLOCK) ON TabVyrCS_EXT.ID=TabVyrCS.ID = @TabVyrCS.Nazev1"
        Dim CMD As New SqlCommand(COMMAND, CONNECTION)

        'NÁZEV SLOUCE V TABULCE
        CMD.Parameters.AddWithValue("@TabVyrCS.Nazev1", TextBox1.Text)

        Dim DA As New SqlDataAdapter(CMD)
        Dim TABLE As New DataTable
        DA.Fill(TABLE)
        If TABLE.Rows.Count > 0 Then
            'SLOUPEC Z TABULKY 3
            TextBox2.Text = TABLE.Rows(0)(3).ToString()
            Label1.Text = "ZÁZNAM ÚSPĚŠNĚ VYHLEDÁN"
            Label1.BackColor = Color.LightSkyBlue
        Else
            MsgBox("ZÁZNAM NENALEZEN")
        End If
    End Sub

Dave Kreskowiak

Во-первых, "это не работает" никогда не является хорошим описанием проблемы. Что же происходит на самом деле? А чего вы ожидаете? Есть сообщения об ошибках?

Затем посмотрите на свой SQL-оператор:

SELECT * FROM TabVyrCS
LEFT OUTER JOIN TabKmenZbozi VKmenStavVC 
ON VKmenStavVC.ID=(
    SELECT TabStavSkladu.IDKmenZbozi FROM TabStavSkladu
    WHERE TabStavSkladu.ID=TabVyrCS.IDStavSkladu
)
LEFT OUTER JOIN TabVyrCS_EXT WITH(NOLOCK)
ON TabVyrCS_EXT.ID=TabVyrCS.ID = @TabVyrCS.Nazev1

Посмотрите на последнюю строку, которая начинается с "ВКЛ.". У тебя там два=. Это неправильно.

Richard Deeming

CMD.Parameters.AddWithValue("@TabVyrCS.Nazev1", TextBox1.Text)

Это недопустимое имя параметра. Придерживайтесь букв, цифр и подчеркиваний.
Идентификаторы Баз Данных | Microsoft Docs[^]
CMD.Parameters.AddWithValue("@TabVyrCS_Nazev1", TextBox1.Text)

1 Ответов

Рейтинг:
0

CHill60

Я, наверное, немного опоздал с этим, но вот идет..

У тебя есть

LEFT OUTER JOIN TabKmenZbozi VKmenStavVC 
Это очень длинное псевдонимное имя для стола! Псевдонимы предназначены для облегчения чтения SQL-запросов и обычно довольно короткие.

У тебя есть
WHERE TabVyrCS.Nazev1 = '" & TextBox1.Text & "'"
Я думаю, вы уже поняли, что существует риск SQL-инъекции, потому что ваш код в комментариях использует параметры. Однако вы делаете что-то вроде
CMD.Parameters.AddWithValue("@TabVyrCS.Nazev1", TextBox1.Text)
что немного сбивает с толку - похоже, вы ссылаетесь на значение в таблице. См. комментарий от @Ричард,-считая - сохранить его простым и просто использовать
CMD.Parameters.AddWithValue("@Nazev1", TextBox1.Text)
Теперь посмотрите на этот подзапрос в вашем первом предложении ON -
(SELECT TabStavSkladu.IDKmenZbozi FROM TabStavSkladu WHERE TabStavSkladu.ID=TabVyrCS.IDStavSkladu)
Это коррелированный подзапрос, потому что вы ссылаетесь на элемент "вне" самого запроса - TabVyrCS.IDStavSkladu

Это должно быть более эффективно (и для меня, легче читать), если вы присоединиться вместо этого к подзапросу, например
SELECT TabVyrCS.Mnozstvi 
From TabVyrCS 
INNER JOIN (SELECT IDKmenZbozi, ID FROM TabStavSkladu) SQ ON SQ.ID=TabVyrCS.IDStavSkladu
LEFT OUTER JOIN TabKmenZbozi.VKmenStavVC ON VKmenStavVC.ID=SQ.ID
LEFT OUTER JOIN TabVyrCS_EXT WITH(NOLOCK) ON TabVyrCS_EXT.ID=TabVyrCS.ID 
WHERE TabVyrCS.Nazev1 = @Nazev1
Извините - я вообще не смог проверить этот запрос, так что остерегайтесь мелких ошибок.


Maciej Los

5ed!

CHill60

Спасибо Мацей