Jayanta Modak Ответов: 2

Отображение времени чтения ошибки никаких подробностей не отображается... Пожалуйста, помогите мне.


показывая время чтения ошибки нет подробностей шоу... пожалуйста, помогите мне.
в этом две линии
cmbpartynm.Text = dr("prtynm")
cmbinvtype.Text = dr("invtyp")

если я удалю 1-ю строку, то ошибка покажет 2-ю строку
пожалуйста, помогите мне

001 — imgbb.com[^]
002 — imgbb.com[^]
003 — imgbb.com[^]
004 — imgbb.com[^]
001 — imgbb.com[^]

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

если я выключу эти две строки, то ошибки не будет
cmbpartynm.Текст = д-р("prtynm")
cmbinvtype.Текст = д-р("invtyp")

Я запускаю две бирючины sub в этом событии загрузки двух combox in form. Я думаю, что проблема исходит отсюда. Итак, я останавливаю запуск этой двухполосной субмарины. нет ошибки и проблемы с вводом-выводом.
Два Привет Саб---------------

1) для имени партии combox
Private Sub loadpartyNAME()
Call connection()
' unmcmb.Enabled = False
Dim ds As New DataSet
Dim dt As New DataTable
Dim da As New OleDb.OleDbDataAdapter
da = New OleDb.OleDbDataAdapter("select * from party_ldg", cn)
da.Fill(ds, "party_ldg")
ds.Tables(0).DefaultView.Sort = "prtynm"
' cn.Close()
With cmbpartynm
.DataSource = ds.Tables("party_ldg")
.DisplayMember = "prtynm"
'.ValueMember = "UNTid"
End With
End Sub


2) для типа Inv(cash/credit combox)

Private Sub loadinvoicetype()
Call connection()
' unmcmb.Enabled = False
Dim ds As New DataSet
' Dim dt As New DataTable
Dim da As New OleDb.OleDbDataAdapter

da = New OleDb.OleDbDataAdapter("select * from inv_type", cn)
da.Fill(ds, "inv_type")
ds.Tables(0).DefaultView.Sort = "invtyp"
' cn.Close()
With cmbinvtype
.DataSource = ds.Tables("inv_type")
.DisplayMember = "invtyp"
'.ValueMember = "UNTid"
End With

End Sub


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

If cn.State = ConnectionState.Open Then
            cn.Close()
        End If
        cn.Open()
        Call connection()
        Dim str As String
        str = "SELECT * FROM party_ldg,inv_type,pur_inv  WHERE pur_inv.partyIDpur=party_ldg.partyID and pur_inv.invtypidpur=inv_type.invtypid and purinvid = '" & TextBox1.Text & "'"
        Dim cm As OleDb.OleDbCommand = New OleDb.OleDbCommand(str, cn)
        dr = cm.ExecuteReader
        While dr.Read()
            '     txtpurinvid.Text = dr("purinvid")
            txtminvdt.Text = dr("purinvdt")
            txtpurinvno.Text = dr("invno")
            txtmpurinvdt.Text = dr("invdt")
            txttotaltaxable.Text = dr("tottaxblamt")
            txttotaltaxamt.Text = dr("taxamt")
            txtinvamt.Text = dr("invamt")
            txtnrr.Text = dr("nrr")
            cmbpartynm.Text = dr("prtynm")
            cmbinvtype.Text = dr("invtyp")
            txtpartyid.Text = dr("partyIDpur")
            txtinvtypeid.Text = dr("invtypidpur")
        End While
        ' Button5_Click(sender, e)
        'Button2_Click(sender, e)
    End Sub

Jayanta Modak

https://ibb.co/bDLEHv
https://ibb.co/minuHv
https://ibb.co/n2FQPa
https://ibb.co/bzSuHv

2 Ответов

Рейтинг:
2

OriginalGriff

Дон;т сделать это, как это! Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Это, вероятно, не решит вашу первоначальную проблему сразу, но позже сохранит вашу БД...

Мы не можем решить эту проблему за вас - у нас нет доступа к вашим данным, которые вам нужны для того, чтобы посмотреть, что происходит на самом деле. Так что все будет зависеть от вас.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!


Jayanta Modak

прилагаемый скриншот базы данных ?

OriginalGriff

Это не помогает, потому что мы не можем использовать его против фактических данных, которые вы вводите. Серьезно, дайте отладчику попробовать-это не сложно, и привыкание к нему в таком маленьком приложении, как это, впоследствии значительно облегчит вашу жизнь.

И сделайте себе одолжение: публикация скриншотов, потому что вы не можете потрудиться скопировать и вставить фактические данные, не облегчает нам задачу - и чем сложнее вы делаете вещи для людей, чтобы помочь вам, тем меньше помощи вы обычно получаете. Есть смысл?

Jayanta Modak

Спасибо за ответ. Я очень Новой в vb.net у меня нет знаний о "SQL-инъекции"
Извините, сэр, https://ibb.co/f2QX4a пожалуйста, посмотрите ссылку и, пожалуйста, помогите мне. Вы говорите об этой части для "SQL-инъекции" или моей части кодирования. Я не знаю английского лучше, пожалуйста, простите меня.

если я выключу эти две строки, то ошибки не будет
cmbpartynm.Текст = д-р("prtynm")
cmbinvtype.Текст = д-р("invtyp")

Я запускаю две бирючины sub в этом событии загрузки двух combox in form. Я думаю, что проблема исходит отсюда. Итак, я останавливаю запуск этой двухполосной субмарины. нет ошибки и проблемы с вводом-выводом.
Два Привет Саб---------------

1) для имени партии combox



Private Sub loadpartyNAME()
Подключение к вызову()
'unmcmb.Включен = Ложь
Dim ds как новый набор данных
Дим ДТ в качестве нового объекта DataTable
Дим да как новый Oledb. OleDbDataAdapter

da = New OleDb. OleDbDataAdapter ("select * from party_ldg", cn)
да.Заполнить(ДС, "party_ldg")
ДС.Столы(0).DefaultView.Sort = " prtynm"
'спицы.Рядом()
С помощью cmbpartynm
.Источник данных = ДС.Столы("party_ldg")
.DisplayMember = " prtynm"
'. ValueMember = " UNTid"
Конец С
Конец Подводной Лодки

2) для типа Inv(cash/credit combox)




Частная суб loadinvoicetype()
Подключение к вызову()
'unmcmb.Включен = Ложь
Dim ds как новый набор данных
'Дим ДТ в качестве нового объекта DataTable
Дим да как новый Oledb. OleDbDataAdapter

da = New OleDb. OleDbDataAdapter ("select * from inv_type", cn)
да.Заполнить(ДС, "inv_type")
ДС.Столы(0).DefaultView.Sort = " invtyp"
'спицы.Рядом()
С помощью cmbinvtype
.Источник данных = ДС.Столы("inv_type")
.DisplayMember = " invtyp"
'. ValueMember = " UNTid"
Конец С

Конец Подводной Лодки

Рейтинг:
2

Patrice T

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
-----
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Visual Basic / Visual Studio Video Tutorial-Базовая Отладка-YouTube[^]
Visual Basic .NET programming for Beginners - точки останова и инструменты отладки[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Jayanta Modak

Спасибо за ответ. Я очень Новой в vb.net у меня нет знаний о "SQL-инъекции"
Извините, сэр, https://ibb.co/f2QX4a пожалуйста, посмотрите ссылку и, пожалуйста, помогите мне. Вы говорите об этой части для "SQL-инъекции" или моей части кодирования. Я не знаю английского лучше, пожалуйста, простите меня.

если я выключу эти две строки, то ошибки не будет
cmbpartynm.Текст = д-р("prtynm")
cmbinvtype.Текст = д-р("invtyp")

Я запускаю две бирючины sub в этом событии загрузки двух combox in form. Я думаю, что проблема исходит отсюда. Итак, я останавливаю запуск этой двухполосной субмарины. нет ошибки и проблемы с вводом-выводом.
Два Привет Саб---------------

1) для имени партии combox



Private Sub loadpartyNAME()
Подключение к вызову()
'unmcmb.Включен = Ложь
Dim ds как новый набор данных
Дим ДТ в качестве нового объекта DataTable
Дим да как новый Oledb. OleDbDataAdapter

da = New OleDb. OleDbDataAdapter ("select * from party_ldg", cn)
да.Заполнить(ДС, "party_ldg")
ДС.Столы(0).DefaultView.Sort = " prtynm"
'спицы.Рядом()
С помощью cmbpartynm
.Источник данных = ДС.Столы("party_ldg")
.DisplayMember = " prtynm"
'. ValueMember = " UNTid"
Конец С
Конец Подводной Лодки

2) для типа Inv(cash/credit combox)




Частная суб loadinvoicetype()
Подключение к вызову()
'unmcmb.Включен = Ложь
Dim ds как новый набор данных
'Дим ДТ в качестве нового объекта DataTable
Дим да как новый Oledb. OleDbDataAdapter

da = New OleDb. OleDbDataAdapter ("select * from inv_type", cn)
да.Заполнить(ДС, "inv_type")
ДС.Столы(0).DefaultView.Sort = " invtyp"
'спицы.Рядом()
С помощью cmbinvtype
.Источник данных = ДС.Столы("inv_type")
.DisplayMember = " invtyp"
'. ValueMember = " UNTid"
Конец С

Конец Подводной Лодки

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Jayanta Modak

- Спасибо, Сэр. Я делаю это