2015-03-07 2 views
0

ОК, поэтому у меня есть форма, называемая quote_guidelines, и я хотел бы использовать процедуру для обновления моей базы данных значениями, введенными в форму quote_guidelines. Значения - это описания и стоимость украшений, продуктов питания/напитков и развлечений. Каждой вкладке назначается один из этих дополнительных сервисов. Я хотел бы сделать процедуру, которая будет обновлять базу данных этими новыми значениями. Проблема заключалась в том, что запрос должен содержать другую таблицу и разные имена текстовых полей. Я попытался решить эту проблему, сохранив имена таблиц и текстовых полей в переменных, которые затем будут переданы в процедуру.VB.NET использовать переменную в текстовом поле

переменная таблицы отлично работает в инструкции sql, но имена текстовых полей не используются. Я попытался это:

quote_guidelines.Controls(description_textbox).Text 

Но это не работает.

Вот мой запрос:

query = "UPDATE " & additional & " SET description='" & quote_guidelines.Controls("" & description_textbox & "").Text & "', cost= " & quote_guidelines.Controls("" & cost_textbox & "").Text & " WHERE " & additional & "ID='" & y & "'" 

Когда я запускаю программу, я получаю следующее сообщение об ошибке «Необработанное исключение типа„System.NullReferenceException“произошло в EHCC_BookingSystem.exe

Дополнительная информация: В экземпляре объекта не задана ссылка на объект."

Я просто понял, что это может быть какой-то другая глупая ошибка, которую я сделал, так вот вся процедура:

Sub UpdateAdditionals(textbox3 As System.Object, textbox4 As System.Object, textbox5 As System.Object, textbox6 As System.Object, textbox7 As System.Object, textbox8 As System.Object, ByRef additional As String, ByRef description_textbox As String, ByRef cost_textbox As String) 
    mysqlconn = New MySqlConnection 
    mysqlconn.ConnectionString = "Server=localhost;userid=root;password=root;database=comp4" 
    Dim reader As MySqlDataReader 
    MsgBox(additional & description_textbox & cost_textbox) 
    Try 
     mysqlconn.Open() 
     Dim query As String 
     query = "UPDATE " & additional & " SET description='" & quote_guidelines.Controls.Find(description_textbox, True).FirstOfDefault().Text & "', cost= " & quote_guidelines.Controls.Find(cost_textbox, True).FirstOfDefault().Text & " WHERE " & additional & "ID='" & y & "'" 
     MsgBox(query) 
     command = New MySqlCommand(query, mysqlconn) 
     reader = command.ExecuteReader() 
     mysqlconn.Close() 
    Catch ex As MySqlException 
     MessageBox.Show(ex.Message) 
    Finally 
     mysqlconn.Dispose() 
    End Try 

End Sub 
+0

Если процедура является функцией C#/vb.net, вы можете передать непосредственно объект или объекты TextBox – bdn02

+0

, но имена текстовых полей будут разными в зависимости от того, являются ли это украшениями, едой/напитком или развлечениями, которые я обновляю. – aLeXaNdRa08

+0

Ваш вопрос непонятен ... вы пытаетесь получить управление текстовым полем с помощью '.Controls (controlname)'? что вы имеете в виду, что ** имена текстовых полей не **? – ilans

ответ

0

Попробуйте это - Заменены Controls в Controls.Find (Обратите внимание на `Истинного параметр для поиска элементов управления детьми):

query = "UPDATE " & additional & " SET description='" & TryCast(quote_guidelines.Controls.Find(description_textbox, True)(0), TextBox).Text & "', cost= " & TryCast(quote_guidelines.Controls.Find(cost_textbox, True)(0).Text & " WHERE " & additional & "ID='" & y & "'" 

Также обратите внимание, вы могли бы сделать .FirstOfDefault(), чтобы получить первый элемент управления (не забудьте бросить):

Controls.Find("nameofcontrol", True).FirstOfDefault() 
+0

К сожалению, это не понравилось. У меня появилось сообщение об ошибке «Аргумент не указан для параметра« searchAllChildren »из« public function find (key as string, SearchAllChildren AS boolean) как system.windows.control() » – aLeXaNdRa08

+0

Странный. Это должно сработать. Я удалил двойные кавычки, которые, казалось, не были нужны. Во всяком случае, это похоже на то, как вы должны идти. Вам что-то не хватает ... – ilans

+0

hmm, я использовал ваш последний eid tof запрос, и теперь я получаю «текст не является членом system.array» – aLeXaNdRa08

Смежные вопросы