#mysql #vb.net #ado.net #textbox
#mysql #vb.net #ado.net #текстовое поле
Вопрос:
Это для программы продажи билетов службы поддержки, которую я создаю:
Когда пользователь нажимает, чтобы запустить тикет, я хочу иметь возможность отображать автономер из mysql, который соответствует текущему заполняемому тикету, чтобы пользователь мог отслеживать свой тикет позже. У меня все настроено, но я не слишком уверен, как я могу отобразить идентификатор билета в текстовом поле.
Прямо сейчас у меня есть так, что выполняется запрос для получения следующего идентификационного номера билета при загрузке формы, но я не уверен, как отобразить его в виде текста в текстовом поле.
'QUERY FOR NEW ID TICKET NUMBER
Private Sub Suggestions_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim idQuery As String = "SELECT MAX(itID) 1 AS Expr1 FROM(TableName)"
With cmd
.Connection = conn
.CommandText = idQuery
.CommandType = CommandType.Text
End With
Try
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
Me.Close()
Catch ex As Exception
MsgBox(ex.ToString)
conn.Close()
End Try
Теперь мне удалось изменить его на это, но я все еще зависаю, потому что я не уверен, правильно ли это:
Dim conn As New MySqlConnection(connStr)
Dim cmd As New MySqlCommand()
Dim Reader As MySqlDataReader
Dim submitteddate As String
'QUERY FOR NEW ID TICKET NUMBER
Private Sub Suggestions_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Try
Dim idQ As String = "INSERT INTO tblit (itID, ersBugIssue, ersSubject, ersBugCategory, ersBugDate, ersBugSubmittedby, ersBugOrHelp )" amp; _
"VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL);"
Dim cmd As new SQLCommand()
With cmd
.Connection = conn
.CommandText = idQ
End With
conn.Open()
cmd.ExecuteNonQuery()
cmd.CommandText = "SELECT LAST_INSERT_ID() as NewTicketID"
Dim Reader As SqlDataReader = cmd.ExecuteReader()
Reader.Read()
MsgBox(Reader("NewTicketID"))
Reader.Close()
conn.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Ответ №1:
"SELECT MAX(itID) 1 AS Expr1 FROM(TableName)"
Это плохая идея, вы очень быстро столкнетесь с проблемами параллелизма.
Вместо этого вы должны выполнить следующие инструкции SQL.
INSERT INTO tablename (ID, morefields)
VALUES (NULL, real_values_or_place_holders);
SELECT LAST_INSERT_ID() as NewTicketID;
-- After the ticket is complete
UPDATE tablename SET morefields = <thedata> WHERE id = NewTicketID
-- If the ticket gets cancelled:
DELETE FROM tablename WHERE id = NewTicketID
Если вы сделаете это так, вы никогда не столкнетесь с проблемами с дублированием или неправильной TicketID
выдачей.
Если вы выполняете a select
, вы не можете сказать, что это не запрос.
Используйте следующий код
Dim cmd As New SqlCommand()
cmd.Connection = conn
cmd.CommandText = "SELECT LAST_INSERT_ID() AS NewTicketID"
Dim reader As SqlDataReader = cmd.ExecuteReader()
reader.Read
MsgBox(reader("NewTicketID"))
Комментарии:
1. ‘ExecuteReader’ не является членом ‘String’ — это синтаксическая ошибка, которую я получаю
2. Кроме того, я понимаю, что сначала мне нужно вставить значения null, а затем я могу их обновить, но вы потеряли меня, когда добрались до раздела «использовать следующий код»
3.
I have to insert null values at first and then I can update them after
правильно, сначала вставьте нули, а затемselect last_insert_id()
обновите (или удалите). Показанный фрагмент кода предназначен для выбора.4. @MDL, они неверны. Ознакомьтесь с официальными документами (и примерами в них) here:msdn.microsoft.com/en-us/library /… и вот: msdn.microsoft.com/en-us/library /…